Skip to content
Back to skills

Command Post

ASecurity

Commander mode: use when one session commands the other Claude sessions on this machine — to read the map of who holds what, to dispatch work (one-to-one or a mutual review between several sessions), to watch its own stability signals, to keep the commander journal that the next commander reads, to print copy-pasteable rebuild prompts when sessions die, to hand the commander role to the next session, or to escalate a decision to the human. Reads each session's own declaration plus the local r...

  • 5 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 5, 2026
toolspythonbashgit

Works with

  • cli

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned October 6, 2026

npx -y skills add HsuanYuLee/polaris --skill command-post --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Command Post?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Command Post
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/hsuanyulee-command-post/badge)](https://www.skillsdirectory.com/skills/hsuanyulee-command-post)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: command-post
description: "Commander mode: use when one session commands the other Claude sessions on this machine — to read the map of who holds what, to dispatch work (one-to-one or a mutual review between several sessions), to watch its own stability signals, to keep the commander journal that the next commander reads, to print copy-pasteable rebuild prompts when sessions die, to hand the commander role to the next session, or to escalate a decision to the human. Reads each session's own declaration plus the local registry; never reads a peer's transcript and never messages a peer to build the map. Trigger: '現在有哪些 session', '大家在做什麼', '哪些可以關掉', '誰手上有什麼', '指揮官交棒', '指派互審', '重建指揮官', '指揮官日誌'."
scope: universal
---

# 指揮官模式 — 圖、下令、交棒、往上請示

多個 session 同時活著的時候,**沒有人知道全貌**。忘記關掉的吃著整台機器;兩個對同一棵樹
動手害彼此重跑;發號施令的那一個不知道別人手上有什麼,於是重複開單。

這支 skill 做四件事:**畫地圖**、**指揮**(一對一派工,或指派幾個 session 互審)、
**交棒**、**問人的時候問得清楚**。

**指揮官是一個角色,不是一個 session。** 狀態全部住在檔案裡——session 登錄、每個 session
自己寫的宣告、單樹的輪次狀態、指揮官日誌。任何讀了那幾份檔的 session 都接得起來,所以換
一個不需要交接會議,只需要照〈四、交棒〉那一節走。

**目錄名與腳本檔名仍然是 `command-post`。** 它是識別字:`POLARIS-ACTOR-IDENTITY` 那一行
指著那條路徑,改名會讓每一張單的 `holders[]` 從下一次寫入起推不出是誰。名字給人讀,路徑
給機器讀,兩者不必是同一個字。

## 一、地圖

```bash
python3 .claude/skills/command-post/scripts/command-post.py
python3 .claude/skills/command-post/scripts/command-post.py --json
```

**它不問任何人。** 答案全部讀得出來——`~/.claude/sessions/{pid}.json` 是完整的登錄,
每一份帶著 `name`、`pid`、`cwd`、`sessionId`、`messagingSocketPath`。逐個問一輪要花掉每個
peer 一輪 context,而那一輪的答案還不一定比它自己剛寫下的話新。

**「它在做什麼」是那個 session 自己寫下的宣告**,不是它 transcript 裡最後一則說的話,
也不從名字、路徑或進程資訊推一句——**推出來的那一句長得跟讀到的一模一樣**,而它會在最需要
真話的時候是錯的。

每個 session 自己寫自己的那一行,只寫自己的:

```bash
python3 .claude/skills/command-post/scripts/command-post.py --declare \
  --session-id <自己的 sessionId> \
  --line '哪條線' --browser '有/沒有' \
  --holding '接的是什麼' --blocked-on '現在卡在哪;沒卡就寫「沒有」' \
  --tickets-opened '開了哪幾張單給誰'
```

**`--line` 回答「你是哪條線」**:接手的指揮官看得到有十個 session,看不出哪一個是 review、
哪一個在跑 DP——這一格補的就是那個洞,不另開一份角色表。**`--browser`** 是因為瀏覽器有沒有
授權決定了一條線做得動哪些事,而它不寫下來就只活在某一則訊息裡。五樣缺一就 exit 2;舊的
宣告沒有這兩格照樣讀得出來,那一格會說出是缺。

每一次宣告同時在指揮官日誌落一筆(見〈三〉〈指揮官日誌〉)——「某條線上線了」本身就是
接手的人要知道的事件。

### 為什麼是宣告,不是最後一則話

兩個理由,第二個才是真正的那一個。

一、最後一則話是「它剛好講到哪」,不是「它在做什麼」。

二、**讀不完,而且差的是數量級。** 2026-08-29 量到:

| 想讀進來的東西 | 量 | 換成 200k 視窗 |
|---|---|---|
| 8 個活著的 session 的 transcript | 220.5 MB(最大一份 92.4 MB/45,135 筆),約 5,780 萬 token | **289 倍** |
| `.claude/skills` 底下 184 份 `.md` | 933 KB,約 239k token | **1.2 倍**(載進去就沒有空間工作了) |
| `issues/` 底下 1,932 份單的正文 | 15.7 MB,約 410 萬 token | **20 倍** |

外部做法對這件事有直接的話,兩條指同一個方向:orchestrator 累積每個 worker 的 context,
[四個 worker 以上就撐爆視窗](https://claude.com/blog/building-multi-agent-systems-when-and-how-to-use-them)(這台機器上是 8 個);
而 lead agent 該收的是萃取過的結論而不是完整 transcript,因為
[raw transcripts are source material, not durable memory](https://www.jeremydaly.com/context-engineering-for-commercial-agent-systems/)。

**所以指揮讀的是索引,要細節去問那一個 session。** 框架知識同理:讀得出「有哪幾支 skill、
各管什麼」就夠指揮,不是把 933 KB 讀進來。

**閒置多久仍然由 transcript 的 mtime 算**——那是一次 stat,不打開檔案。

**transcript 在哪:`cwd` 把 `/` 和 `.` 都換成 `-`。** 只換 `/` 的話,家目錄帶點的機器
(`hsuanyu.lee` 這種)**一筆都對不到**——而輸出看起來只是「大家都讀不到」,不像壞掉。

### 讀不到的留在地圖上

一列的身分讀得到、而它在做什麼讀不到時,**那一列還在**,並且說出讀不到的是哪一份東西。
它不從清單上消失,也不填一個猜的。至少三種讀不到,各自說各自的話:

| 讀不到什麼 | 地圖上長什麼樣 |
|---|---|
| 這個 session 從來沒寫過宣告 | 指名那個路徑,並說出修法是要它跑 `--declare` |
| 宣告檔在,但讀不動 | 指名那個路徑,並說出是「讀不動」不是「沒寫過」 |
| 宣告在,但缺欄位 | 指名缺的是哪幾個欄位 |
| 登錄檔本身讀不動、或登錄目錄不存在 | 說出這不是「沒有 session」 |
| transcript 不存在(算不出閒置多久) | 說出算不出來,不填一個 0——猜出來的 0 看起來像剛動過 |

**這四種要人做的事不一樣**,所以它們不可以長成同一句話:沒寫過要去叫它寫,讀不動要去看
那個檔,缺欄位是它寫了但沒寫全。

**一個安靜的第三態,下一次就會被當成查過了。**

### 名字與進程來自同一次查表

每一列同時帶得出「要跟它講話用哪個名字」與「它是這台機器上的哪一個進程」,兩者出自同一份
登錄檔。任何一列缺其中一項,那一列自己說出它缺什麼。

### 不在這台機器上的分開放

登錄裡 `pidDomain` 跟這台機器對不上的那些**單獨列出來**,而且**永遠不是「該關掉」的候選**
——這裡關不掉它們,把它們列成候選等於教人去做一件做不到的事。

## 二、指揮

地圖之上做兩件事,兩件都**只出建議,不出動作**。

### 該關哪些

產出一份清單,每一項帶著憑什麼這樣認為——閒置多久、它最後說的話是不是「做完了」。
**執行關閉的是人。**

**這支 skill 不自己關掉任何 session。** 真的要動手的話(`kill`),它在動手之前停下來等
那個人自己說的話,並把停下來的理由記下來。理由是:關掉一個 session 會丟掉它還沒寫進磁碟的
工作,而那件事沒有復原鍵。

### 誰去做哪一件

這支只回答**哪一個 session 去做**。它不回答一件工作要不要立案、現在該在哪一站、什麼時候停
——那些在 `driving-work-to-done`,只在那裡。

**同一個問題的分法,舉一個例**:「某張單的證據要重量」進來的時候——

- **那條流程回答**:這件事要不要立案、現在在 engineering 還是 verify-ac、重量完算不算收斂。
- **這支回答**:手上八個 session 裡,哪一個的 `cwd` 就在那棵樹上、而且閒著。

前者問的是工作,後者問的是人手。**兩邊都不知道對方的答案,也不需要知道。**

### 指揮者自己的五條邊界

**每一條都是真的壞掉之後才補的**,各自帶著那一天的實例。它們講的是指揮者自己不該做什麼
——不是別人。

**一、按 context 邊界切分,不按工作的類型切分。**

把自己切成「別人施工、我審查」聽起來像分工,實際上是把每一份工作的 context 都搬到指揮者
這裡來:要審查就要讀對方讀過的東西,於是同一份 context 被讀兩次,而指揮者的視窗是那個會
先滿的。外部做法把它講成
[Dividing by type of work creates constant coordination overhead;divide by context boundaries](https://claude.com/blog/building-multi-agent-systems-when-and-how-to-use-them)。

2026-08-29 的實例:指揮的 session 讀 peer 的 transcript、再自己重推一次它們的結論,
**一整天沒有交付任何東西**。

分法是按 context 邊界:一份工作連同它要的 context 整包給一個 session,指揮者只拿那一行
宣告。要細節就去問那一個 session,不是自己把它的 context 讀進來重推一次。

**二、不把別的 session 開的單收進來再轉手給第三個。**

每一次轉手都掉一層保真度(telephone game)。指揮者當中繼的時候,「誰要做什麼」多了一個
可以漏掉的地方,而漏掉的樣子是安靜的——那張單就是沒有人開始做,沒有任何東西會紅。

2026-08-29 的實例:產品 session 開的 DP 要先給指揮者、再由指揮者轉給施工的 session。
結果那天新開的四張 DP 一張都沒有到施工的 session 手上;同一天指揮者還發明了一個問題叫
施工的 session 停下來等答案,又把它調去做一張產品 PR。

**開單的人直接送給要做的那一個。** 指揮者從地圖上讀得到誰接了什麼,不需要經手。

**三、收到指令之後的第一個動作是查地圖,不是自己下去查。**

順序固定三步:

1. **先查地圖**:這件事有沒有 session 已經在做。有的話轉給那一個,回報使用者「已經交給
   哪一個」。
2. **沒有人在做,先回報一句**,帶著自己的建議(派給誰,或開一個新的 session)。**這一步
   不讀 code、不查 log、不翻 ticket。**
3. **使用者說「由你去找」,才自己動手。** 那是一句明確的授權,不是預設。

使用者 2026-09-09 拍板,原話:「指揮官收到指令後,先優先找有沒有 session 在處理,沒有先
回報,我跟你說由你去找,你再去找,我想延長指揮官的 session」。

**例外是答案已經在手上的唯讀問題。** 「那張單現在什麼狀態」在地圖上讀得到就直接答。
**要開始查才答得出來的,就是第 2 步**——分界不是問題唯不唯讀,是答它要不要新的 context。
少了這一格,一句話的問題也會變成一次往返。

2026-09-08 的實例:指揮的 session 自己讀了三個 repo 的程式碼、查了 log 平台、翻了兩張
ticket,每一項都有實作 session 做得動——而它的 context 在那一天壓縮了一次。**壓縮掉的是
所有 session 的「要做什麼、怎麼算成功」,以及使用者當天全部的拍板**,而那份東西只有這一
個 session 手上有。

這一條跟第一條方向相同、切點不同:第一條講的是**已經分派出去的工作**不要自己重讀一遍,
這一條講的是**還沒分派的指令**不要自己接手。

**四、待決是那一格的,不是整張單的。**

一張單被擋住的通常只有其中一格。指揮官問使用者之前,先回答一個問題:**這張單還有哪些格
不依賴這個答案?** 答案不是空的,就先把那幾格派下去,做到只剩待確認;然後才帶四格去問
被擋的那一格(見〈五〉)。

**問人的那一則要寫得出「其餘各格已在做/已做完」,才算問完。** 寫不出來,表示還有東西
沒派,那一則還不該送。

2026-09-10 的實例:一張跨三個 repo 的產品單,其中一個 repo 的 push 被遠端規則擋下(CI
的映像壞了)。指揮官把對 SRE 的稿、branch 命名、base 逐件拿去問使用者,負責那個 repo 的
實作 session 閒置約一小時。同一段時間,另外兩個 repo 裡有五件可做的事——整合施工、挖字、
後台設定、本機端到端、一顆 PR 的改動——一件都沒派。被擋的只有一個 repo 的一個動作。
使用者原話:「卡住就不繼續做了嗎」「明明就是不同 repo」「為什麼不是做到『剩需確認的
東西』」「你沒有善盡自己能做的全部,這是那個 skill 負責的」。

**這一條不放寬〈往上傳之前先過濾〉。** 被擋的那一格若是不可逆或對外的,照舊往上傳、
不退回去。這一條讓的是「其餘各格先做」,不是「被擋的那一格自己決定」。

**五、實作線回「改好了」,自己讀整份交付物。**

實作線回報「改好了」的時候,它列的是它改了哪幾句。**指揮官要讀的是整份交付物**,對每一張
單的結論,不只收那幾句改動。沒被列出來的那幾句,正是沒有人再看一次的地方。

**轉給實作線的句子,自己先過一次規則。** 指揮官給的句子會被照抄,所以它違反的規則(今日格
只放動作、等待不是卡關)會原樣出現在交付物裡,而且實作線會把它當成已經裁過的。

2026-10-06 的實例:一份表單改了十三輪,其中四條錯是指揮官自己給的指令——把已經隨版本上線的
改動寫成「未併所以未生效」、把自然過期的事列成卡關、要昨日格保留一句跟今日格矛盾的結論、
今日格寫成一個結果而不是動作。每一條都是使用者讀到才改。

### 派工之前:今天進來的需求重對一次

**一個判斷的前提,會被後來進來的需求推翻,而判斷本身不會自己失效。** 派工之前,把今天
進來的需求從頭重讀一次。任何建立在更早一句話上的判斷(「早上說過 X,所以 Y 不需要了」)
都要重驗兩件事:那句話的前提還在不在,以及這件事現在住在哪個 repo。

2026-09-10 的實例:早上的決定是「key 併成一組,那顆 PR 就不需要了」。下午有人要求「側邊欄
改成英文」,而側邊欄那段文字住在那顆 PR 的 repo。指揮官沿用早上的判斷把那顆 PR 判成可以
關掉,沒有在新需求進來之後重對一次。

### 送訊息給別的 session 時

- **不轉述一句同意而不帶原話。** 「人已經同意了」不算授權,那個人自己說的話才算。
- **不要求任何 peer 去做一件它自己的權限設定會擋下來的事。** 對方被擋下來的事,繞道給另一
  個 session 做,就是把使用者的權限決定繞過去。
- **不要求任何 peer 去改它自己的設定。**
- **派產出類工作(例如一份站會報告)只交來源在哪,不附施工摘要。** 來源是日誌路徑、當天動過
  的單號、使用者的原話。摘要會被照抄,而它漏掉的就是對方沒讀到的。對方交回來的形狀不對時,
  先指回那支 skill 自己寫好的判準那一節,不另外發明一種格式。

這四條沒有任何機制在擋,它們靠被讀到而生效。

### 併與上線的指令

**下「併」「壓 tag」「上線」任何一種指令之前,先列那張單每個環境的驗證格。** 本機、測試
環境、stage、正式環境,每一格寫三樣:驗了沒、驗的是什麼值、證據在哪。

**有一格是「驗不到」或「用別的環境替代」,就不下那道指令。** 改派人去修那個環境,修好、
驗過再談併。本機對照不替代 stage,stage 壞掉也不是改用本機證據的理由。這一條守的是送出去
收不回來的那一步,所以它比任何時程都優先。

**時程裁決只改時間,不改驗證條件。** 使用者說「排下一版」,意思是「不是今天」,不是
「review 過就可以併」。把一句時程翻成一道併的指令,等於替使用者跳過了他沒說要跳過的檢查。

**給使用者的狀態回報,第一行寫每個環境的驗證格現況。** 不寫「可 review」「可併」「可以
上了」這種結論字:結論字把「哪一格沒驗」藏在後面,而使用者看不到的那一格,就是會安靜地
錯下去的那一格。實作線回報給指揮官也照這個形狀,派工指令裡已經帶著這一句。

2026-10-05 的標本:實作線回報 stage 壞掉、驗不到,驗值來自本機對照。指揮官仍擬了一則
「你看過我就壓 tag 上線」的私訊稿,又把使用者的「排下一版」轉成「review 過就併主分支」的
指令,回報裡沒有把「stage 未驗」放在前面。沒有任何東西真的被併或上線,是使用者攔下來的。
同一張單前一週才因為本機手寫測資自帶答案,讓一個造出來的 PASS 過關。使用者原話:「你做出
危險決定,不能接受」「你不給我及時情況,讓事情靜默錯誤,非常嚴重」「未經授權擅自越過檢查
叫直接 merge master,請當作全面失敗來處理」。

「每個環境各自完整驗」這條原則當時已經寫在常駐規矩裡,指揮官讀過仍然犯。所以這一節是一個
程序,掛在下指令的那一刻,不是再多一句原則。

**派「追一顆 PR 到併」的時候,指令寫明要量四樣,不只看票。** 每 5 分鐘量一次可併狀態
(mergeable)、合併狀態(mergeStateStatus)、每個 check 的最新一筆、head 上的有效票。任一樣
變了當下處理:有衝突就解,check 紅就查根因,pending 超過 20 分鐘就回報。只盯 review 事件的
話,衝突與卡住的 CI 都看不到。2026-10-01 的標本:一顆 PR 票數夠了,卻因為衝突乾等近一小時,
沒有人發現。

## 三、派工之後

**一條鏈的心跳不該是那個人。** 2026-08-29 這台機器上 8 個 session 從 10:06–12:38 UTC 全部
停到隔天 10:14,22 到 24 小時。沒有一個是卡住的:每一個都做完一輪、在自己的視窗裡印完
報告、然後停住。唯一會叫醒它們的東西是有人送訊息,而那個人只在他自己想到的時候出現。

### 指令自己帶著回報要求

不要手打派工的文字。手打的那一版每次都會漏掉同樣兩樣東西,而漏掉的樣子是安靜的:

```bash
python3 .claude/skills/command-post/scripts/command-post.py --order \
  --issue <那張單的路徑> --to <session 名> [--from <回報給誰>]
```

它只印出來,不送給任何人——送出去仍然是 `SendMessage`,那是一個不可逆的動作。

它做兩件手打做不到的事:**確認那條路徑真的存在**(一個指向不存在位置的成功定義,讀起來
跟一份好的成功定義一模一樣,`--issue` 指不到就 exit 3、不產出指令),以及把「回報給誰」
寫死在文字裡(答不出來就 exit 4——一則沒有收件者的回報要求等於沒有)。

指令裡不重講那份成功定義,只給路徑。**重講一次就有第二份會漂的定義**,而漂掉的那一刻
沒有人在看。

**指令開頭是開場四步與失聯協定**,一字不差地由腳本產出:查出自己的名字、`--declare`
(含 `--line` 與 `--browser`)、查有沒有瀏覽器工具、把名字與瀏覽器有無回給指揮官;以及
指揮官失聯時讀哪一份日誌、對人講哪一句話請人重建指揮官。**日誌路徑與指揮官名字是實際值**,
腳本路徑是絕對路徑——收件者的 cwd 不一定在這個 workspace 裡。使用者 2026-09-19 的原話:
每條線「建立那一刻要跟你聯絡並自報 work name」「回報是否被授權開啟瀏覽器」「若你失聯,
去找指揮官工作日誌,提示人類重建指揮官」。

產出那一刻日誌落一筆「派工」。**產出不等於送出**,那一筆就這樣寫。

**回報要的是狀態,不是逐條判定。** 判準是使用者 2026-08-30 的原話:「只要需要『下一步該
幹嘛的指引』,就要回報」「碰到問題必須回報主管指引」。所以指令要的只有三樣——做完哪一張
或卡在哪一張、需不需要指引、需要的話缺什麼。逐條判定留在那張單的 `.spine/` 裡,要細節的
人自己去讀。

以前那一版寫「回報要對得上那份定義:哪幾條過了、哪幾條沒過、量不到的有哪些」。那是細節,
而**指揮官不用知道細節**——每一則到了指揮官那裡還要再摘一次給人,而多跳的訊息鏈每一跳都
會掉東西。

**回報不等於停下來等,這一句要明著寫在指令裡。** 做完 → 送一則狀態 → 自己抽下一張繼續;
只有板子答不出下一步、或自己走不下去,才停著等。少了它,「做完要回報」會被讀成「做完要
停下來等回話」,而那正是 `driving-work-to-done` 列為退化訊號的第二條。

**派一件最後要送進表單的工作,指令寫明「表單填好、停在送出前、逐格回報填了什麼」。** 只寫
「不要送出」會被讀成只交一份檔案就停。這件事 2026-09 犯過兩次。

### 指派兩個以上的 session 互審

一對一的派工回答「誰去做」。有些問題不是「誰去做」,是**「這個結論站不站得住」**——而那個
問題一個 session 自己答不了:它會去驗自己的結論,而去驗它會回綠
(`.claude/rules/` 那一份講的同一件事:自己剛寫出來的判斷是草稿,不是根據)。

```bash
python3 .claude/skills/command-post/scripts/command-post.py --review \
  --issue <那張單的路徑> --to <session A> --to <session B> [--to <session C>]... \
  --about '<要互相下判斷的是什麼>' [--from <回報給誰>]
```

它**一個收件者產一則**,每一則指名它自己與其餘的人。**不產群發的那一種**:一則沒有指名
收件者的指令,每一個收到的人都會以為對方會做。

跟一對一差三樣,而那三樣正是「互審」與「兩則獨立的派工」的差別:

| 多的那一格 | 少了它會怎樣 |
|---|---|
| 對方是誰 | 兩邊各做各的,回來兩份沒有對照過的結論 |
| 要對對方的**什麼**下判斷(`--about`) | 一邊審實作、一邊審結論,兩份講的不是同一件事 |
| 收斂不了的時候,**兩邊各自的結論與證據一起**送回指揮官 | 其中一邊自己挑一個送,而**分歧本身才是指揮官要的東西** |

`--about` 缺了就 exit 2 並說出理由。**人數與模式對不上的兩種也各自擋**:`--review` 只給
一個收件者是 exit 5(一個人審不了「互相」),`--order` 給超過一個是 exit 6(它是一對一,
訊息會指去 `--review`)。**不安靜地產出一則看起來像的東西**——一個人的「互審」讀起來跟
互審一模一樣,而收到的人沒有對象可以互審。

**它跟一對一一樣不重講那份成功定義,只給路徑。**

### 指揮台那一頁:每一輪重讀

```bash
python3 .claude/skills/command-post/scripts/command-post.py --board \
  --issues <單樹根> --waiting-on '<指揮官自己在等什麼>'
```

它印三段:唯一手寫的那一格、在飛的單、這台機器上的 session。

**它的主要用途不是交接,是每一輪重讀。** 把目標重寫到 context 尾端,避開
lost-in-the-middle(Manus 講的 recitation,
<https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus>)。
交接是副作用——主 session 壓縮太多就換一個,這一頁不掉。

它還印兩樣來自日誌的東西:**指揮官在等什麼**(這一次沒給 `--waiting-on` 就讀日誌裡最後
一句,並標明是哪一筆)與**日誌尾端**(`--journal-tail`,預設 8 筆)。

三條限制,前兩條是這個 workspace 既有的規矩:

- **產生的部分不手寫。** 先例是 `{單樹根}/OPEN.md`,它自己的表頭就寫著「下一次重算會整份重寫」。
- **成功條件只指過去,不抄。** 那一欄是路徑,不是內容。唯一權威是那張單的 fence,
  `verify-ac` 拿它跟 git 歷史比;抄第二份就是兩份會漂,而漂的是最不能漂的那一份。
- **手寫的只有一格**:`--waiting-on`。板子答不出來的只有它。**給了就落進日誌**(跟上一句
  一字不差就不再寫,板子每一輪都重讀),所以它不再是交棒時會遺失的東西。

### 指揮官日誌

`~/.claude/sessions/command-post/journal.md`,跟 session 登錄與宣告同一層。它講的是這台
機器上的 session,而各條線的 cwd 不一定在同一個 workspace,所以它不住在任何一個 workspace
裡。**append-only**:不改舊的,只往下加;檔案不存在就建,寫不進去就 exit 7 並說出路徑。

**每一筆由發生那件事的命令在那一刻寫下**,指揮官不另外手寫:

| 事件 | 誰寫 |
|---|---|
| 某條線宣告自己(上線、狀態變了) | `--declare` |
| 產出派工、互審指令 | `--order`/`--review` |
| 指揮官換了在等的東西 | `--board --waiting-on` |
| 收到回報、做了裁決 | `--log`,見下 |

```bash
python3 .claude/skills/command-post/scripts/command-post.py --log \
  --who <這一筆是誰的事> --what '<發生什麼>' \
  [--problem '<碰到的問題>'] [--decision '<決定了什麼>'] [--waiting-on '<現在在等什麼>']
```

`--problem` 與 `--decision` 可以沒有——一則「上線了」沒有問題也沒有裁決。**收到一則回報就
記一筆**:使用者要的是「追蹤各 session 工作情況、碰到的問題」,而那些只在回報裡出現過一次。

**使用者自己的待辦只住在一個地方:`--log --waiting-on` 那一格,寫成「使用者:X」。** 回覆裡
列「你那邊剩什麼」之前,先讀日誌最後一筆 waiting-on,照抄,不憑記憶重推。

**事件一到,當下重寫那一格。** 事件包括使用者說他做了,也包括他說的話蘊含做了。推不出某一條
還成不成立,就不列——一條存疑的待辦會讓他去做一件已經做完的事。

這份清單以前沒有住在任何一處:每則回覆從記憶重推一次,而事件發生時只更新派工紀錄,所以它
一定落後。2026-10-06 的標本:使用者說「兩個測試環境都可以進了」,那句等於權限已經到手;
指揮官下一則回覆仍列「你今天要去要權限」。使用者原話:「這樣我到底能不能相信待辦清單」。

### 「誰在做」那一欄:脊椎寫下、這裡去問死活

那一欄以前整欄是空的。現在它是產生的,而產生它的兩半各在一邊:

- **寫**:`init`/`advance`/`record` 每次寫輪次狀態時,把「這一趟是誰在跑」記進
  `{單}/.spine/loop-state.json` 的 `holders[]`。核心不認得 session 是什麼——它掃所有
  `SKILL.md` 找下面這一行,跑它,把印出來的第一行原樣記下來。
- **讀**:這一支拿那份紀錄,**在執行的這一刻**去 session 登錄量每一個對象還在不在。
  紀錄只證明「當時它動過這張單」,還在不在是現在才問得到的。

<!-- POLARIS-ACTOR-IDENTITY: python3 .claude/skills/command-post/scripts/command-post.py --whoami -->

`--whoami` 不靠任何人宣告:它往上走進程祖先,每一跳去 `~/.claude/sessions/{pid}.json` 找,
找到就是它(實測兩跳)。**這件事重要的地方在覆蓋率**——這台機器上 8 個 session 只有 1 份
自願寫下的宣告,而 `init`/`advance`/`record` 是流程走不過去就不能繼續的三步。

**不覆寫,逐個對象各佔一格。** 只有 `init` 寫的話,換手之後那一欄永遠是開單的那個人;
每次覆寫的話,最後一個路過的人就成了「誰在做」。而覆寫的那一版連「不只一個人接著同一張
單」都表達不出來——那正是這一欄最該被看見的東西。

答不出來分成四句不同的話,不合併成空白:**沒有人接**(量到了,`holders[]` 是空的)、
**這一次問不到**(狀態檔或登錄讀不到)、**紀錄在、人不在**(有紀錄,登錄裡找不到那個
對象)、**推不出來是誰**(寫的時候就推不出來,理由跟著記下來)。

**表格的第一列是脊椎建議的下一張。** 它同時也是一張在飛的單——只把它寫成一句話的那一版,
一張正在施工、正被人接著的單在這張表上根本沒有列,而那正好是第五欄最該印出東西的那一種。
它跟 `seed`/`stop` 重疊時用路徑去重,不會出現兩次。

### 板子上的兩個不穩訊號

**兩個都只印,不判斷該不該換一個。**

| 訊號 | 從哪裡量到 | 為什麼不配門檻 |
|---|---|---|
| 壓縮過幾次 | transcript 裡的 `isCompactSummary` | 壓縮間隔量過是平的(1099/1248/1268/1149/1543/1270/1231/1111/1122),沒有加速的特徵,所以「開始過度壓縮」那一刻偵測不出來 |
| 連續失敗的工具呼叫 | transcript 尾端 512 KB 裡的工具結果,從最新的往回數到第一次成功為止 | 沒有量過門檻。發明一個只會讓一個猜測看起來像一個量測 |

第二個為什麼是**連續**而不是總數:總數會隨 session 變長而單調上升,於是它對「現在還穩不
穩」永遠給同一個方向的答案。連續失敗會被任何一次成功歸零,所以它量得到的是當下。

**只讀尾巴。** 這台機器上最大一份 transcript 92 MB,為了一個訊號讀完它,這支就變成它自己
要避免的那件事。

**「看了 43 筆、沒有一筆失敗」與「這個視窗裡一筆工具結果都沒有」是兩件事**,而它們都會是
0,所以板子把它們印成兩句不同的話。後者答不出這個問題。

外部做法對「誰來判不穩」有直接的一句:self-evaluation 有偏差,不穩要由外部量,不由那個
agent 自己判(<https://www.anthropic.com/engineering/harness-design-for-long-running-applications>)。
這兩個訊號是外部量的——它們讀的是磁碟上的 transcript,不是問那個 session「你還好嗎」。
**而判斷仍然留給人**:印出來的是量,不是結論。

### 「等使用者」不是任何一個 session 的預設狀態

**一個實作 session 閒置超過一個回合,而它手上那張單還有可做的格,是指揮官的缺陷訊號。**
不是那個 session 的,因為決定它下一件做什麼的是指揮官。

每一輪讀板子時從兩個已經印出來的量讀它:session 那一段的「閒置多久」,以及「在飛的單」
那張表的「誰在做」。**「那張單還剩哪幾格沒派」板子答不出來**——一張單底下有哪幾格不是
任何一份檔案裡的資料,它只在指揮官手上。所以這一半由指揮官自己補:看到一個閒著的
session,就問它那張單還剩什麼。

**這個訊號不做成腳本。** 格子那一半沒有資料來源,要做就得先發明一份「每張單有哪幾格、
各派給誰」的紀錄,而那份紀錄要人手維護、會跟實際派出去的訊息漂開。它守的也不是一個不可逆
或會出去的後果——閒置的代價是時間,下一輪讀板子就看得到。實例見〈指揮者自己的五條邊界〉
第四條。

### 心跳:靠排程,不靠某個人想起來

**一條鏈的心跳不該是那個人。** 上面〈三〉開頭那一段量到的 22–24 小時全停,成因是唯一會
叫醒它們的東西是有人送訊息。

**以前這裡的解法是 `notify_when_idle`,那一版不夠**——它自己量到一個偵測不到的第三態
(下一段),而一個有洞的偵測配上「有網子接著」的印象,比沒有網子糟。

現在的解法是指揮官自己排一個班:**定期重讀板子、掃自己的收件匣**,不等任何人來敲。

- **一次性的下一次**:`ScheduleWakeup`,說出這一次要等的是什麼、等多久。
- **反覆的班表**:`CronCreate` / `CronList` / `CronDelete`。

**間隔照那個要等的東西挑,不照一個好看的數字挑。** 等的是 CI 就照那條 pipeline 的長度;
沒有特定訊號要等就拉長(20–30 分鐘一次),讓安靜的醒來很少。

**這個做法自己的限制要說出來,它有兩個**:

1. **排程活在那個 session 裡。** 那個 session 結束,班表跟著沒了——所以它守不住「指揮官
   自己掛掉」這一種。守那一種的是〈四、交棒〉:狀態全住在檔案裡,換一個 session 讀得回來。
2. **醒來的是指揮官,不是被派工的那一個。** 它讓指揮官定期回頭看,不會讓一個停住的
   session 自己動起來。看到它停住之後要做的仍然是送一則訊息。

### `notify_when_idle` 那一格:它偵測不到的第三態

排程取代的是「心跳」,不是這一格——`notify_when_idle` 仍然可以在派工時順手訂,只是**不要
把它當成網子**。

`SendMessage` 的 `notify_when_idle: true` 讓那個 session 下次閒下來時回一則通知。
**它是 one-shot,所以每一次派工都要重訂一次**——上一次的訂閱已經用掉了。

**訂閱成功不等於通知會到你手上。** 這一格是量過的(2026-08-30,對兩個不同的 session 各訂
一次):兩次的回覆逐字相同,都寫著「delivered to you if that session runs in the same
permission class as this one (or is one this session spawned); otherwise it is only logged
here」,而它**從來不說這一次落在哪一邊**。`success: true` 在兩種情況下長得一模一樣。

所以這條偵測有一個偵測不到的第三態:permission class 不同的 session 靜默了,通知只留在
紀錄裡,指揮官這邊什麼都不會發生——而那跟「它還在忙」長得一樣。**這一種要靠上面那個排程
自己回頭看地圖,不要當成有網子接著。**

### 收到 idle 通知不要立刻重訂,會自轉

2026-08-30 真的發生了一次:收到 idle 通知之後重訂一次,而重訂的那一刻它正好是閒的,
**訂閱當場觸發,把同一個事件原樣再送一次**——兩則逐字相同,收的人分不出那是新事件還是
回聲。

順序是:收到通知 → **先核對板子** → 它真的動過就不重訂(它還在跑,做完會照契約回報)→
只有真的靜止才重新掛訂閱。

### 判成靜默之前:先問,不要先宣布

收到 idle 通知而那個 session 沒有回報過,看起來就是靜默。**先做這兩件事:**

**一、核對板子的那條查詢自己要有 preflight。** 「它今天有沒有動」這種查詢在讀不到的時候
會回空集合、exit 0,而空集合讀起來跟「它沒做事」一模一樣。所以問「今天有沒有動」之前
先問一次「不加任何視窗的話有沒有東西」,兩者都空才是真的空。

2026-08-30 的實例:`git log --since=2026-08-30` 的裸日期被 git 解成「那天的**此刻**」,
於是 20:27 跑的那一趟連 20:26 的 HEAD 都濾掉,回 0 筆、exit 0,輸出裡沒有一個字說視窗
是從 20:27 開始的。同一個 repo 同一分鐘:`--since='2026-08-30 00:00'` 是 17 筆、
`--since=yesterday` 是 21 筆。指揮官因此對一個正在出貨的 session 宣布它「閒下來沒回報」。

**二、對 peer 下判斷之前先問它。** 問句跟宣告的成本差很多:宣告錯了,對方要花一整輪去
反駁;問句錯了,對方一句話就答完。上面那個實例裡,指揮官的措辭是「你閒下來了但沒回報」
——一個沒驗過的讀數被寫成了事實。

### 每個 session 維持是自己的視窗

派工是 session 對 session,**不是把工作收成 in-process 的 teammate**。理由是可見性:
每個 session 有自己的視窗,人看得見它在做什麼、隨時插得進去。收進同一個進程裡的那些
只有指揮官看得到。

### Agent Teams:這一次量到什麼

**以前這裡寫「證不出來能用」。那是一句沒有量的話**——它讀起來像一個結論,實際上只說了
「我沒試」。2026-09-06 量了一次,量到的與沒量到的分開寫。

**量到的**(在這台機器、CLI `2.1.260`、一個一般的互動 session 裡):

| 量的是 | 結果 |
|---|---|
| 這個 session 有沒有建立 team 的工具 | **沒有**。`ToolSearch 'select:TeamCreate,TeamAdd,TeammateIdle,TaskList'` 回 `No matching deferred tools found` |
| 這個 session 有沒有 teammate | **沒有**。`ListAgents` 列 14 個 peer session、0 個 teammate |
| 這台機器有沒有 team 的狀態 | `~/.claude/teams/` 存在(2026-08-30 建的)但**是空的** |
| 這個 build 認不認得 team 這個概念 | **認得**。`TaskStop` 收 `name@team` 形狀的 id,`SendMessage` 與 `Agent` 的說明都提到 teammate |

**所以量到的結論是**:功能在這個 build 裡,但**這個 session 呼叫不到它**。這跟「證不出來
能用」不是同一句話——前者說得出缺的是什麼。

**文件說的**(<https://code.claude.com/docs/en/agent-teams>,讀來的,不是量到的):lead
固定不能換、team 不能巢狀、`/resume` 不還原 teammate、有 `TeammateIdle` 與 `TaskCompleted`
兩個 hook、teammate 之間有共用的 task list 與依賴。**這一段標成文件說的**,因為它一條都
沒有在這台機器上被跑過。

**還沒量到的,以及要怎麼驗**(留給下一個指揮官,一個新 session 才做得到):

1. 開一個新的互動 session,第一件事跑
   `ToolSearch 'select:TeamCreate,TeamAdd'`。有東西回來就記下它的完整 schema;沒有就記
   下這個 build 對一般 session 一律不給。
2. 有的話,建一個兩人的 team,指派一件小工作,然後回答三個問題:**別的 session 看不看得
   到那些 teammate**(`ListAgents` 有沒有列)、**人在自己的終端機看不看得到它們在做什麼**、
   **`TeammateIdle` 會不會叫醒 lead**。
3. 第二題的答案決定要不要用它。**那一題不是效能問題,是可見性問題**——下面〈每個 session
   維持是自己的視窗〉那一段就是為它存在的。

**在那之前,這支 skill 不依賴 Agent Teams。** 不依賴的理由不是「它不能用」,是**上面第 2
步還沒有人跑過**。

## 四、交棒:指揮官是角色,不是 session

換一個指揮官不需要交接會議。**要交的東西全部讀得回來**——包括以前唯一會遺失的那一格。

### 接手的人照這個順序讀

一步一步,每一步答一個問題。**前四步都不需要問任何人。**

| 序 | 讀什麼 | 答的是 |
|---|---|---|
| 1 | `--board --issues <單樹根>` | **前一個指揮官在等什麼、日誌尾端**(最近發生了什麼、碰到什麼問題、裁了什麼),在飛的單有哪些、誰接著,這台機器上有哪些 session、各自是哪條線 |
| 2 | `--whoami` | 我自己是哪一個 session。**它印的是 sessionId,不是名字**——要名字的話拿它去比板子那份 session 清單的宣告路徑 |
| 3 | 板子上還在飛的那幾張單 | 這一輪真正的優先序。**不是「第一列那張」**——第一列是脊椎建議的下一張,那跟指揮官手上的優先序常常不同 |
| 4 | 這一份 SKILL.md | 指揮官這個角色能做什麼、不能做什麼 |
| 5 | 日誌尾端不夠的話,往回讀日誌全文 | 某條線為什麼走到現在這樣。從尾端往回讀到懂為止,不從頭讀 |

**順序不能換。** 先讀板子再讀單:反過來的話會從一張單的內容去推整盤狀況,而那張單答不出
「別人手上有什麼」。

**第一步答不答得出「誰扮什麼角色」,看宣告有沒有被寫。** 2026-09-06 量到的覆蓋率是 0/10。
補法是 `--order`/`--review` 產出的指令第一段就要收件者跑 `--declare --line`,由做事的那個
session 自己寫,不由指揮官代寫。

### 重建:prompt 印在對話裡

指揮官或某幾條線整批死掉(編輯器重開、機器重開)時,新開的 session 要一則完整的開場
prompt。**全文印在輸出裡**,每一段是一個可以整段複製貼上的 markdown 區塊,檔案只是副本:

```bash
python3 .claude/skills/command-post/scripts/command-post.py --rebuild \
  --from <指揮官名字> --issues <單樹根> [--since-hours 24]
```

使用者 2026-09-19 的原話:「直接給我 prompt,不要用文件給,用 md 給,我要能直接複製貼上,
未來 /command-post 重建指揮官 session 也要這樣」。所以**把 `--rebuild` 的輸出原樣放進回覆**,
不要只給副本路徑。

它印兩種段落:

- **指揮官那一段**:讀板子、讀日誌、上一任在等什麼、重建那一刻各條線的宣告,以及上線後
  把新名字告訴每一條還活著的線。
- **每一條線一段**:`--since-hours` 之內宣告過 `--line` 的,同一條線取最新那份宣告(`--line
  指揮官` 不算一條實作線)。內容是開場四步與失聯協定、常駐規矩、上一任最後的宣告,以及
  日誌裡跟這條線有關的最近幾筆。沒宣告線的 session 不印段落,並被指名——印一段猜的比不印糟。

**常駐規矩這支 skill 不帶。** 各條線要守的規矩常常是某一家公司的(憑證怎麼載、PR 標題怎麼
寫),而這支 skill 會被帶到別的環境。那些寫在日誌旁邊的 `~/.claude/sessions/command-post/standing.md`,由指揮官自己放、自己
改;`--rebuild` 原樣貼進每一段,沒有那份檔就說出來。

### 什麼時候該交

**這裡不給門檻**,理由跟〈板子上的兩個不穩訊號〉是同一個:那兩個訊號偵測不出「開始不穩」
那一刻,配一個門檻只會讓一個猜測看起來像一個量測。

**決定是人做的**,板子把兩個量印給他看。真的要換的時候照上面的順序走。

### 日誌是事件流,不是交接文件

接手讀的東西裡,**沒有一樣要人在交棒那一刻坐下來寫**:session 登錄(機器寫的)、每個
session 自己的宣告(它自己寫的)、單樹的輪次狀態與 `holders[]`(脊椎寫的)、這一份
SKILL.md,以及指揮官日誌(每一筆在事件發生那一刻由命令寫的)。

**分界在「什麼時候寫、誰寫」,不在「是不是一份檔」。** 不要為交棒另開一份「指揮官交接
文件」:交棒那一刻才手寫的摘要會跟實際狀態漂開,而漂掉的那一刻正好是有人要接手、最需要
一句真話的時候。日誌不是那種東西——它的每一筆在事件發生那一刻就寫下,不改舊的,所以它
不會「過期」,只會變長;接手的人讀的是尾端。

**`--log` 是補一筆事件,不是寫一份摘要。** 拿它寫「目前整體狀況如下……」就又回到交接文件了
——整體狀況是板子的事,板子每一輪重算。

## 五、問人的時候

**問之前先過〈指揮者自己的五條邊界〉第四條。** 那一條沒過,下面這幾節都還不用讀。

### 形狀就是這個 workspace 既有的那一份

**結論、根據、待決**,三段,順序固定;待決的每一項帶自己的建議與理由。這支不發明第二種
格式——`.claude/rules/style-and-language.md` 已經規定了一份,而兩份會漂。

### 待決的每一項帶四格

**指揮官問人的時候,被問的那個人不是第一線接觸這些工作的人。** 這是指揮官模式的直接後果:
他只跟指揮的那個 session 講話,其餘 session 的來龍去脈他沒看過。所以「要不要開一張單」這種
一行式的問題,對第一線的人是完整的,對他是空的——他手上沒有那張單怎麼冒出來的那一段。

所以每一項待決帶四樣,**缺一項就是還沒問完**:

| 帶什麼 | 說的是 |
|---|---|
| 怎麼冒出來的 | 哪一次量測、哪一則回報逼出這一題 |
| 不決定會怎樣 | 具體後果,不是「比較不好」 |
| 選項各自的代價 | 每一條路各要付什麼 |
| 我的建議與理由 | 這一條 `.claude/rules/style-and-language.md` 本來就有,前面三格是加在它前面的 |

**四格各一兩句就夠——帶前因後果不等於寫長。** 那一份規則同時規定一般回覆不超過一個螢幕,
兩者不衝突:四格要的是每一格都有東西,不是每一格都很長。

**四格是加在「待決」那一項裡面的**,三段仍然是既有的結論/根據/待決,**不另立一套**格式。

### 往上傳之前先過濾

指揮官的價值在於**擋掉不該佔用人的注意力的問題**,不在於當一個轉發器。判準一句話:

> 這件事在提問者自己的**管轄內**,而且做錯了**改得回來** → **退回去**讓它自己決定;
> 其餘才往上傳。

兩類分得開,各舉一個真的收到過的:

| | 共同點 | 例子 |
|---|---|---|
| 往上傳 | 不在提問者的管轄內 | 不可逆或對外的(改寫歷史、推 commit、送出對外的留言);共用資源(`port 3001` 要不要讓給另一個 session、某個工作區要不要清掉);跨單排序;只有人才知道的(某個語系用短碼還是區域碼);真的走不下去 |
| 退回去 | 問的是它自己的東西,而且可逆 | 「要不要開一張單,你決定」(`driving-work-to-done` 答得出來)、「要不要把這句寫進它自己那張單的活文件」、「你要我改,說一句我就改」 |

**退回去要帶理由**,理由就是那個判準:這是你的單、這件事改得回來。**只回一句「你自己決定」
不算退回**——它沒有把判準交出去,下一次同樣的問題會再上來一次。

**兩種常見的「問」其實都該退回去。** 一是範圍定了之後的「這個不用做/量到 0/可以另開」:
記一行在單上就好,不上問;真的要上問的只有擋住施工的權限或環境、或會動到畫面的改法。二是
子單要併、要關、要移:照母單的意圖自己判、自己做;只有母單意圖本身要改,才往上問。

**不確定的往上傳。** 這條過濾省的是人的注意力,不是指揮官的判斷;把一件真的不可逆的事誤判
成可逆,代價**比多問一次大**得多。所以**不可逆或對外的不退回去**,沒有例外——那一格不參與
「在不在管轄內」的判斷。

這個判準來自一次量測:一個 session 的收件匣 206 則 peer 訊息,含求指示標記的 59 則,逐則
讀完能認定是真的在問人的約 28 則,兩類的分界很乾淨。**那份量測自己的邊界要一起說**:它來自
**舊的作業方式**(這一版的回報契約之前)、是那個 session 對**自己的收件匣**做的分類、59 是
**樣式命中**不是確認數。所以它證得出兩類真的分得開,證不出比例會維持。

### 要代送的對外內容,哪一種先給人看

上面那一格說「不可逆或對外的不退回去」。**它管的是「這件事誰決定」,不是「這段文字誰過目」**
——一則要送出去的 review 回覆,決定權本來就不在提問的那個 session 手上,剩下的問題只有一個:
使用者要不要逐則讀過它。這一節回答的是後者,所以它不是上面那條的例外,是那條沒有回答的
另一半。

判準看那則回覆在主張什麼:

| 回覆的內容是 | 怎麼辦 |
|---|---|
| 照 reviewer 說的改了,並說明改了什麼 | **直接送**,送完回報送了什麼、送去哪 |
| 不同意 reviewer,要主張另一個立場 | **先交給人看**,等他回話再送 |
| 自己手上那張單的 JIRA comment、附件、狀態轉換、欄位 | **直接寫**,送完回報 URL。使用者要在 JIRA 上看到內容才判斷得了,停在草稿等同意等於什麼都沒做(2026-09-10 到 09-11 兩張單各停一次;原話「每次上傳 jira 不應該一直問,沒有從 jira 看到根本不能判斷,我要知道那個 session 在搞什麼,一直要確認不做事」) |

分界是**事實與立場**。reviewer 提的可驗證技術主張,判真偽本來就是這一端的活;真正只有人
回答得出來的是立場,不是事實。所以照做型的回覆裡沒有任何需要人拍板的東西,逐則確認只是把
它排進一條隊伍。

代價量得出來:2026-08-29 到 08-31,同一批工作有八支 PR 停在原地,其中四支是 CHANGES_REQUESTED
——等的就是那幾則沒被放行的回覆。

**這條界線只劃在 review 回覆與自己那張單的 JIRA 上。** 推 commit、改寫歷史、Slack 訊息、
別人的單、動共用資源,仍然照上面那一格往上傳,那個判準一個字都不放寬。

**判錯的責任在指揮官。** 任何一則判成直接送、而使用者事後認為該先看的,整批回到逐則確認
——一條沒有人負責的界線會往寬的那邊漂。

### 什麼時候值得畫一張圖

判準一句話:**要對方同時比對三個以上的量、而那些量之間的關係用句子講會需要回頭讀第二次時,
畫。其餘不畫。**

對三種問題各判一次:

| 問題 | 判準說 | 為什麼 |
|---|---|---|
| 「A 跟 B 兩個做法選一個」——只有選項與取捨 | **不畫** | 兩個東西並排,一張表就夠,圖不會讓取捨變清楚 |
| 「八個 session、各自閒置多久、手上有什麼、哪些能關」 | **畫** | 四個量乘八列,句子講完對方要回頭數 |
| 「這樣做可以嗎」——只要一個點頭 | **不畫** | 沒有量要比 |

**不因為看起來用心就畫。** 一張沒有人需要的圖,是把讀的人的時間換成自己的努力看起來比較多。

**圖不取代那三段。** 圖出現的時候結論、根據、待決仍然在,待決仍然帶著建議——圖是根據的一
部分,不是「你自己看」的代替品。

**圖上每一個量都要說得出它從哪裡量到的。** 畫不出來源的量不要畫進去。

## 這支不做的事

- **不判定一件工作算不算完成。** 那是 `verify-ac`。
- **不決定下一站。** 那是 `driving-work-to-done`。
- **不停止不是它自己起的進程、不動別的 session 的工作區或分支、不啟動或停止任何共用的
  服務與容器。**

Files in this skill

  • SKILL.md23.7 KB
  • scripts/command-post.py31.7 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.