# `agents/` — 工人名單(inkstone/ISEP#86) > leo 派工時派給的不能是「一個 agent」,要派給**有名字的人**。 > 「票上看不出來這件事是誰做的」是這張票的來由。 **一個檔案 = 一個工人。** 每個檔案只回答四件事: | 段 | 問題 | 為什麼一定要有 | |---|---|---| | `**負責 repo**` | 它管哪個(或哪幾個)repo | 派工時挑人的唯一判準;也是【身份】欄第二格。同一件事的幾個 repo 用「、」隔開(例:`course-hand`) | | `## 開工前先讀` | 它要先讀什麼 | 這是**每個工人各自不同**的部分——共通規定補不了 | | `## 紅線` | 它不准做什麼 | 全機共通的紅線在共通規定裡;這裡只寫這個 repo 特有的 | | frontmatter `description` | 一句話它是誰 | `scripts/roster list` 印的就是這一行 | ## 為什麼是這個形狀,不是自己造一套 `agents/` 是 Claude Code plugin **原生**的 subagent 目錄,檔名(frontmatter 的 `name`) 就是 `Task` 工具的 `subagent_type`。⇒ 「指名派給誰」不必發明新欄位、不必改派工單格式 (派工單仍然只有 `【工單】` 一行,`dispatch-format-guard.sh` 的行為一個字都沒變)。 ## 怎麼用 ``` python3 scripts/roster list # 名單:有哪幾個工人、各自管什麼 python3 scripts/roster show isep-hand # 一個工人的全文(它開工前會讀到的東西) python3 scripts/roster names # 只印名字,給腳本用 ``` 派工時把名字放進 `Task` 的 `subagent_type`;名字不在名單上, `hooks/roster-guard.sh` 會擋下來並說「**沒有這個人**」,同時把名單印出來。 ## 加一個工人 在這個目錄新增一個 `.md`(照既有檔案的四段),然後: ``` python3 scripts/roster list # 新的名字要出現 bash hooks/tests/roster-guard.test.sh # 全綠 ``` **不必改任何 hook**——名單是資料,閘讀的是這個目錄。 ## 新開一個 repo 之後,工人是誰在什麼時候加的(inkstone/ISEP#118) **以前的答案是「靠人記得」,所以一定會忘。** 實查 2026-09-14:org 裡 20 個 repo, 名單只蓋到 6 個;`llm-wiki-template`(09-01 建)與 `ax-courses`(09-07 建) 都是**第一次派工撞上 `roster-guard.sh`** 才發現沒人,而那一刻最省事的出路是 開 `/tmp/.roster-ok-*` 例外閘繞過去——繞過去之後,下一次還是會撞。 **現在的答案**: - **什麼時候**:建 repo 之後,**開第一張票後的下一個 session 開場**。 - **誰叫**:`scripts/isep-nag`(掛在 `overdue-nag-guard.sh` 上,開場跑一次)的第 ④ 類 「**有票卻沒有工人的 repo**」——拿 org 的 repo 清單比對本目錄的 `負責 repo`。 - **誰加**:總管。在這個目錄加一個工人檔,或把 repo 寫進既有工人的 `負責 repo`。 判準只有兩個事實:名單上沒有人負責它、它有開著的票。 **沒票的 repo 不叫**(封存、投影用、還沒開張的——沒有工可派,就不是缺人), 所以這一段不會變成每天念一串不相干東西的噪音。 **只進開場給總管看的長版,不進 Telegram**——補工人是總管的事,不吵 leo。 手動看一次:`python3 scripts/isep-nag`(`--json` 裡的 `repos_without_worker`)。