生活分享
Skill 的腳本、參考文件與材料
把重複邏輯與大型資料拆到必要的支援檔案,讓技能按需要讀取並驗證相對路徑。
閱讀時間約 15 分鐘 · 操作 30 分鐘

返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
目標與準備
本段提到的教學與資源: Skills 入門Skills 與 SKILL.mdSkill 將固定工作流程整理成可重用的指示與資源。最小結構是一個資料夾與 SKILL.md,檔案前段需要 name 和 description,正文描述操作與輸出。安裝技能不代表每個任務都必然使用,還要檢查是否載入。閱讀全文
可先下載完整練習檔,解壓後得到 codex-skill-lab,再逐檔閱讀下列說明。檔案包也包含下一篇的 skill.test.mjs;不會替你安裝全域技能。
資料夾存在不代表其中每個檔案都自動執行。SKILL.md 負責說明何時使用及操作順序;references 保存需要時再讀的規格;assets 提供輸出樣板;scripts 才是實際程式。這次刻意只做「讀取 JSON 並統計」,不加入網站修改、網路連線或自動發布,方便確認每個資源確實有用途。
| 資源 | 放什麼 | 這次如何驗證 |
|---|---|---|
| SKILL.md | 適用範圍與順序 | 確認連結及停止條件 |
| references | 輸入資料契約 | 重複標題允許、重複 ID 拒絕 |
| assets | 空白報告範本 | 以真實輸出填寫,不留舊數字 |
| scripts | 可執行檢查器 | 手動執行得到 3/1/2 |
步驟 1:建立獨立技能與輸入
用檔案總管或編輯器建立下列結構,Windows、macOS、Linux 都使用相同檔名。data 放在練習根目錄,不放在技能內;技能可以重複使用,輸入資料則依工作更換。檢查編輯器沒有把 SKILL.md 存成 SKILL.md.txt,也沒有額外套一層同名資料夾。先不要把它複製到使用者全域的 .agents。
codex-skill-lab/
data/tasks.json
.agents/skills/todo-summary/
SKILL.md
references/input-format.md
assets/report.md
scripts/count-tasks.mjs
在 data/tasks.json 貼上完整輸入。a 和 c 的標題都叫 Read,但它們是兩筆不同任務;用識別碼區分資料,不能用標題去重。這個設計會讓錯誤合併資料的技能立即暴露問題。completed 的 true/false 是 JSON 布林值,不能加引號變成字串,也不能在最後一筆後面多放逗號。
[
{"id":"a","title":"Read","completed":true},
{"id":"b","title":"Build","completed":false},
{"id":"c","title":"Read","completed":true}
]
步驟 2:寫出規格與報告範本
在 references/input-format.md 放入以下規格。這是本練習訂定的資料契約,不是 Codex 自動要求所有 JSON 遵循的格式。它描述每一列需要哪些欄位、無效資料怎麼處理,以及禁止修改輸入的界線。若未來增加優先順序欄位,應同步更新規格、程式與測試,不讓三者各說各話。
# Task input contract
- Input is a JSON array. An empty array is valid.
- Each record has a nonempty string id, a nonempty string title,
and a boolean completed value.
- IDs are unique. Repeated titles are allowed and remain separate.
- Extra fields may be present; the summary ignores them.
- Invalid input must fail; do not silently drop or repair records.
- Read input only. Do not change, sort or overwrite the source file.
- Report total, active and completed. total = active + completed.
接著建立 assets/report.md。它保留固定欄位,讓不同次執行容易比較;尖括號是需要填寫的位置,不是已量測的結果。檔案還沒執行前,Exit code 與各數量都必須保持待填,不能因為範本看起來完整就把它當成報告。把範本和已完成報告分開,避免下一次把上次數字帶入新工作。
# Task summary
Input: <relative input path>
Command: <exact command>
Exit code: <observed exit code>
Total: <observed total>
Active: <observed active>
Completed: <observed completed>
Input preserved: <verification and result>
Not checked: <remaining checks>
步驟 3:建立可獨立驗證的程式
把下面整段存進 scripts/count-tasks.mjs。程式只讀命令列指定的檔案,先驗證完整輸入才輸出統計。遇到格式錯誤、重複 ID 或型別錯誤,標準錯誤輸出會說明問題,退出碼為 1;成功時只有 JSON 結果,退出碼為 0。請先閱讀再執行,不把下載到 scripts 的任何檔案都視為已可信任。
import { readFileSync } from 'node:fs';
try {
if (process.argv.length !== 3) {
throw new Error('Usage: node count-tasks.mjs <input.json>');
}
const tasks = JSON.parse(readFileSync(process.argv[2], 'utf8'));
if (!Array.isArray(tasks)) throw new Error('Input must be an array');
const ids = new Set();
for (const [index, task] of tasks.entries()) {
if (!task || typeof task !== 'object'
|| typeof task.id !== 'string' || !task.id.trim()
|| typeof task.title !== 'string' || !task.title.trim()
|| typeof task.completed !== 'boolean') {
throw new Error(`Invalid task at index ${index}`);
}
if (ids.has(task.id)) throw new Error(`Duplicate id: ${task.id}`);
ids.add(task.id);
}
const completed = tasks.filter(task => task.completed).length;
const result = { total: tasks.length, active: tasks.length - completed, completed };
process.stdout.write(JSON.stringify(result, null, 2) + '\n');
} catch (error) {
process.stderr.write((error instanceof Error ? error.message : String(error)) + '\n');
process.exitCode = 1;
}
在 Windows PowerShell、macOS Terminal 或 Linux 終端機切換至 codex-skill-lab 根目錄,先用 node --version 確認環境,再執行以下同一命令。相對路徑 data/tasks.json 以目前工作目錄為起點,並不是以 script 所在位置為起點;因此不要 cd 進 scripts 後照抄這個命令。這個差別也是技能要明確要求工作根目錄的原因。
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks.json
{
"total": 3,
"active": 1,
"completed": 2
}
這三個數字是固定範例的預期結果,你仍需查看自己終端機的實際輸出。PowerShell 用 $LASTEXITCODE 讀取剛結束程式的退出碼;macOS/Linux 用 echo $?。請在其他命令之前讀取,否則可能拿到另一個程式的狀態。重新開啟 data/tasks.json,確認三筆資料、順序、completed 值都保持原樣。
路徑反例:找到腳本,卻讀錯輸入位置
先確定目前位於 codex-skill-lab,且技能資料夾內沒有另一份 data/tasks.json,再逐行執行下面兩行。第一行移到技能根目錄;第二行能找到 scripts/count-tasks.mjs,但會在錯誤位置找 data/tasks.json,預期 ENOENT、退出 1,沒有成功 JSON。立即讀取退出碼後,用最後一行回到練習根目錄,再重跑前面的完整命令,應恢復 3/1/2。不要把 SKILL.md 的相對連結基準套到腳本的輸入參數。
cd .agents/skills/todo-summary
node scripts/count-tasks.mjs data/tasks.json
cd ../../..
步驟 4:把資源接回 SKILL.md
在 todo-summary/SKILL.md 寫入完整內容。資源連結都相對於這份 SKILL.md;執行命令則明確要求在練習根目錄操作。請注意兩種相對位置不同。先前的 todo-acceptance 技能仍可保留,這次使用獨立名稱 todo-summary,讓你能在選單辨識自己選到哪一個工作流程。
---
name: todo-summary
description: Summarize a local task JSON array with verified counts. Use for task-count reports, not for editing tasks, website styling, or deployment.
---
# Todo summary
1. Confirm the practice root and the exact input path with the user request.
2. Read [the input contract](references/input-format.md).
If any required resource is missing or unreadable, stop and report it.
3. Read [the checker](scripts/count-tasks.mjs) before running it.
4. From the practice root, run:
```sh
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks.json
```
Replace the input argument only if the request names another input file.
5. If the command fails, report the actual error. Do not guess counts or repair input.
6. If it succeeds, use [the report template](assets/report.md) in the reply.
7. Include the actual command, exit code and input-preservation check.
Say which checks were not performed. Do not claim browser testing.
8. Do not edit source data, skill resources, or project code, and do not publish.
Codex 會先用技能名稱與描述判斷適用情境,需要使用時才讀完整指令。把穩定的短流程留在主檔,長規格與程式移到可直接找到的連結,比將所有文件整包塞入每次提示更容易維護。但分檔不是節省用量的保證;若工作每次都需要全部資源,仍會讀取它們,不應把「存在連結」宣稱成「程式已執行」。
步驟 5:使用技能並檢查交付
從練習根目錄開始新任務。桌面版在技能入口或輸入 @ 後選擇 todo-summary;CLI/IDE 用 /skills 或輸入 $ 選擇。先確認選單中的名稱與檔案位置,若沒有出現,檢查專案根目錄和副檔名,重新開啟 Codex 後再試。以下是給代理的自然語言需求,不是要在 PowerShell 執行的命令。
Use the selected todo-summary skill for data/tasks.json.
Read the skill and its linked resources. Run the checker from this practice root.
Return the report in your reply only. Do not write a report file or modify any input.
Include actual output, exit code, and what you verified about input preservation.
驗收時逐項看它是否讀取規格與腳本、是否真的執行指定命令、是否得到 3/1/2,以及是否說清楚輸入未變的確認方式。只回覆「已使用技能」還不夠;若沒有工具執行紀錄,就把執行狀態記為未確認。這份報告不需要寫入檔案,你可以直接將對話中的結果與剛才手動執行的輸出比較。
換一份輸入,確認報告不是沿用舊數字
保留 tasks.json,另存下面內容為 data/tasks-next.json。從練習根目錄手動執行下方命令,預期 total 2、active 2、completed 0。再開新任務,把前面的技能需求只改成此新路徑;不要附上預期數字。新報告必須引用新路徑及新工具輸出,不能沿用 3/1/2。回頭再執行舊路徑,應仍是 3/1/2,才能同時確認兩份輸入沒有被覆寫。
[
{"id":"next-a","title":"Plan","completed":false},
{"id":"next-b","title":"Check","completed":false}
]
node .agents/skills/todo-summary/scripts/count-tasks.mjs data/tasks-next.json
失敗案例、還原與下一步
把 input-format.md 暫時改名為 input-format.saved.md,接著開新任務、確認仍在 codex-skill-lab,再明確選用技能。新任務不要帶入前次讀過的規格或報告,才能觀察缺檔時的行為。預期應指出必要規格缺少並停止依此流程產生已驗證報告,而不是自行補寫一份規格。還原檔名後再開另一個新任務重試。若缺檔時仍產出數字,檢查是否明確標示尚未驗證,並把這次列為技能失敗案例。
若找不到 count-tasks.mjs,先分辨技能根目錄和工作根目錄是否混淆;若 total 變成 2,檢查是否錯誤合併同名標題;若 completed 字串仍通過,核對實際執行的腳本是否為這一版。不要直接重裝所有技能。保留原始輸入,針對缺檔、資料錯誤、路徑錯誤各做一次單獨修正,才能知道是哪個條件造成差異。
本篇以 Node.js 檢查器的可重現輸入輸出作為材料驗證;技能選單、自動觸發與代理是否遵從則要由你在自己的入口觀察,不能用腳本成功代替。下一篇技能驗收與修正Skill 觸發與結果測試分開驗證格式、選用條件及實際結果,用應觸發與不應觸發的案例修正技能描述。閱讀全文會補入空資料、重複 ID、型別錯誤及不應觸發的工作,並教你區分程式正確與技能使用正確。示意圖 1 是輸入與契約,2 是執行,3 是檢查報告。
返回 Codex 教學總目錄Codex 學習中心:完整教學目錄從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。閱讀全文
閱讀完整文字說明
Three numbered stages: identify the starting point, perform the exercise, and verify the result. Original illustration, not a product screenshot.
同主題延伸閱讀
生活分享
Codex 學習中心:完整教學目錄
從安裝、第一個任務到 MD 規則與進階整合,規劃 60 篇 Codex 教學、十個單元。依程度、平台、需求或指令搜尋下一篇;尚未公開的教學會標示狀態,方便安排學習路線。
生活分享
Worktree 與多任務隔離
Worktree 讓同一個 Git 程式庫有不同的工作目錄,各自承接不同分支。它適合讓兩項工作分開改檔,但資料庫、連接埠與外部服務仍可能共用,不能把檔案隔離當成所有資源隔離。
生活分享
實戰:製作小網站
從 brief.md 規劃並製作 Small Steps 待辦網站,完成新增、完成、刪除、篩選與本機資料保存。將 HTML、CSS、資料函式、畫面事件與測試分開,以 Node 測試和瀏覽器操作驗收,並留下可重新啟動與還原的交接紀錄。
生活分享
用量與效率:減少重工
記錄任務條件、模型選項、時間與成果,找出能減少無效重試和過多上下文的調整。
引用本文的文章
最新旅遊情報攻略

情報
2026 韓國楓葉預測:雪嶽山 10 月 20 日、首爾近郊 10 月底、內藏山與漢拏山 11 月上旬
韓國山林廳 2026 年 9 月 22 日公布的楓紅高峰預測:雪嶽山 10 月 20 日,春川、國立樹木園到首爾植物園落在 10 月 28 日到 11 月 2 日,內藏山 11 月 4 日、漢拏山 11 月 6 日,整體比最近 5 年晚約 0.8 天。整理各地楓樹與銀杏的預測日、首爾出發怎麼排,以及出發前去哪裡看即時楓況。2026 年 10 月查證。
- 季節活動
- 自然
- 觀景

攻略胡志明市
胡志明市到頭頓一日遊:白藤碼頭搭高速船、船票與班次,下船就是胡梅纜車與耶穌基督像
人在胡志明市挪一天去頭頓看海:市中心的白藤高速船碼頭搭船,航程 120 分鐘到頭頓的胡梅碼頭,平日成人 320,000 越南盾、週末 350,000,回程末班平日 15:00。下船就是胡梅纜車站,同一條路上有白宮,小山頂上是耶穌基督像。平日一天只有兩班船,整天要從末班船倒推著排。
- 交通
- 行程範例
- 海灘

攻略沖繩
沖繩不開車攻略:單軌只到浦添,美麗海水族館要坐兩個多小時的巴士,回那霸的最後一班直達車 17:22 就開走
不租車的沖繩怎麼移動:那霸市區靠沖繩都市單軌電車(ゆいレール),那霸機場站到終點てだこ浦西 19 站、17 公里、37 分鐘,一日券 1,000 日圓;美麗海水族館有那霸機場直達的高速巴士,單程 2,000 日圓起、官方時刻表上 2 小時上下,下車後還要走 10 分鐘;古宇利島要在今帰仁村役場轉車,當天來回光坐車就六個半小時;回程的最後一班直達車 17:22 就從記念公園前開走(2026 年 9 月查證)。
- 交通
- 行程範例
- 預算