Community寫作與編輯github.com

Agents-On-Rails/skills

針對 Claude、GitHub CoPilot 及其他 AI 代理的代理技能。

skills 是什麼?

此技能為「Agents-On-Rails」套件的一部分,提供專注於需求編寫的 AI 代理技能「/aor-req」。它遵循 EARS-12 模式與 INCOSE C1-C9 品質屬性,協助開發者或需求工程師在 Claude、GitHub Copilot 等平台上,將使用者需求 (UN)、產品需求 (PR) 與軟體需求 (SR) 撰寫為結構化的 Markdown 文件。技能支援「探索模式」(單一需求、對話式)與「文件模式」(完整規格編寫、自動寫檔),並內建 Q&A 逐題提問、大輸入分批處理、以及失敗事件揭露等操作紀律。其工作流程包含範圍界定、層級分類、需求撰寫、欄位規格表、Echo Gate 可測試斷言與完整性檢查,確保產出兼具正確性、可追溯性與高品質。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add Agents-On-Rails/skills

Installed? Explore more 寫作與編輯 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

/aor-req — 需求編寫

根據 EARS-12 樣式、INCOSE C1-C9 品質屬性及規範的交叉引用語法,起草 UN、PR 與 SR。輸出為 Markdown 格式。

關於技能與代理的注意事項。 AOR 套件包含位於 .claude/skills/aor-*/SKILL.md 的技能(可直接調用,例如本項)以及位於 .claude/agents/aor-sme-*.md 的SME 代理(僅由 aor-review / aor-review-adhoc 產生的子代理系統提示)。請勿將代理當作技能調用——這會導致「找不到技能」的錯誤。

操作紀律

全程適用。啟動時逐一陳述,以便使用者了解。

  • 模式(啟動時宣告): 詢問這是探索工作階段(單一需求、對話式、不產生檔案)還是文件工作階段(完整規格編寫、寫入檔案)。若輸入範圍是內嵌文字而非檔案路徑,則預設為探索模式;否則為文件模式。模式控制步驟 5–7 是否寫入磁碟。
  • 調用確認: 技能的第一個回應應說明「以 aor-req 在 <模式> 模式執行。除非您另有要求,否則檔案將寫入 <輸出路徑>。」消除「技能是否真的執行了?」的模糊性。
  • 問答紀律: 一次只問一個釐清問題。等待使用者回答後再問下一個。不要堆疊問題。單次 AskUserQuestion 調用提供一個包含多個選項的決定(例如多選選單)視為一個問題;在一次調用中提出兩個不相關的決定則視為堆疊。
  • 失敗揭露: 若任何規定的步驟無法完成(檔案寫入被阻擋、子代理調用失敗、參考檔案不可用、部分完成、逾時、權限被拒),請在聊天中說明。揭露後,暫停並詢問是否要重試、退回至揭露的手動模擬,或中止——請勿在未告知的情況下繼續。對於明顯的暫時性失敗(例如網路逾時),在強制揭露前允許重試一次。

工作流程

步驟 1:建立範圍

若使用者傳遞了範圍文字或檔案路徑,則直接使用。否則,透過 AskUserQuestion 詢問:「應指定哪些功能或變更?」

區分範圍文字與檔案路徑(REQ-B):若輸入符合以下任一條件,則視為路徑:(a) 包含 / 或 \),(b) 結尾為 .md/.txt/.xlsx/.csv/.docx,或 (c) 透過 Read()` 可解析為磁碟上現有的檔案。否則視為範圍文字——包括多字描述,例如「病患預約掛號系統」。

平局判決: 若只有規則 (c) 符合(無 / 或 \,無識別的副檔名,但 Read() 可解析)且輸入為單一單詞,請在使用者確認後再視為路徑:「我看到一個名為 <input> 的檔案存在。您指的是那個檔案,還是這是一個範圍描述?」

對於 Excel 來源的輸入,請預期主機 LLM 已在此技能執行前將資料列轉錄為工作用 Markdown 緩衝區(此套件不直接解析 Excel)。

步驟 1a:分類層級

若為探索模式,請詢問:

「這是使用者需求 (UN)、產品需求 (PR) 還是軟體需求 (SR)?」

一旦知道層級,跳過未使用的步驟:UN 審查需要步驟 2;PR 審查需要步驟 3 + Echo Gate;SR 審查需要步驟 4–6。

探索模式中的多層級輸入: 若使用者提供一組 UN+PR+SR(或任意多個層級的組合)而非選擇單一層級,則視為多層級審查——依序針對所提供的層級執行步驟 2–4,但維持探索模式的檔案寫入紀律(不自動寫入磁碟;在對話中呈現發現結果)。

若為文件模式,除非使用者另有指定,否則預設遍歷所有三個層級(UN → PR → SR)執行步驟 2–4。

步驟 2:撰寫使用者需求 (UN-NNN)

針對每個不同的利害關係人需求,撰寫一個 UN。規則:

  • 技術中立、以利害關係人角度表述
  • 純敘述(非 EARS 語法)
  • 包含問題陳述(2-3 句)+ 需求陳述
  • 透過 traces_to::UN->Persona [<persona-id>] 標記人物角色
  • 優先級:關鍵 | 高 | 中 | 低

格式請參閱 templates.md。

步驟 3:撰寫產品需求 (PR-NNN)

針對每個 UN,推導出 PR:

  • 技術中立、可衡量、客觀
  • EARS 語法(參閱 ears-guide.md 了解 12 種模式)
  • 每個 PR 向後追溯:derived_from::PR->UN [UN-NNN]
  • 每個 PR 向前追溯:traces_to::PR->SR [SR-NNN]
  • 每個快樂路徑 PR 必須至少有一個 If/Then(非預期行為)PR 作為伴隨
  • 同樣的 If/Then 伴隨規則也適用於步驟 4 的 SR 層級——每個快樂路徑 SR 必須有一個 If/Then SR 伴隨,指定實作層級的復原措施
  • 每個 EARS-N(否定式/shall not)PR 必須至少有一個正面的伴隨 PR(Ubiquitous、Event-Driven 或 State-Driven),指定預期的正確行為;相同的規則也適用於 SR 層級

「快樂路徑」定義(REQ-E):若 PR 使用以下正面 EARS 模式之一,則為快樂路徑:Ubiquitous、Event-Driven、State-Driven、Optional、Complex、EARS-E、EARS-T、EARS-P。排除:Unwanted Behaviour、EARS-N(否定式/shall not)、EARS-F(失敗模式宣告)。

對每個 UN 執行對抗性錯誤分解:

  1. 它如何默默地失敗?
  2. 它如何有噪音地失敗?
  3. 它在負載下如何失敗?
  4. 它在惡意攻擊下如何失敗?
  5. 它隨著時間如何失敗?

每個失效模式將成為一個 EARS If/Then PR(在標題中標記 [ADV];識別碼保持規範,例如 PR-007 [ADV])或存放於單獨風險登錄檔的註記。

實例。 UN:「保留每個上傳的檔案」。失效模式:「當磁碟可用空間耗盡時默默地失敗」。產生的 PR:

### PR-007 [ADV]:在磁碟壓力高時拒絕上傳
如果磁碟可用空間低於 5%,則系統應拒絕新的上傳,回傳 HTTP 507 Insufficient Storage 並附上 Retry-After 標頭。
derived_from::PR->UN [UN-001]
traces_to::PR->SR [SR-014]

請注意,失效模式具體且量化(5%、HTTP 507、Retry-After)——這正是使 PR 具有可驗證性(C7)的關鍵。

步驟 4:撰寫軟體需求 (SR-NNN)

針對每個 PR,推導出 SR:

  • 實作特定:命名服務、API、資料庫、錯誤碼
  • EARS 語法,包含具體元件名稱
  • 每個 SR 向後追溯:derived_from::SR->PR [PR-NNN]
  • 每個 SR 向前追溯:traces_to::SR->TC [TC-NNN]
  • 使用子句層級粒度(SR-NNN.c1、.c2)將相關行為整合至單一 SR ID 下
  • 每個快樂路徑 SR 必須至少有一個 If/Then(非預期行為)SR 伴隨(步驟 3 中定義了「快樂路徑」)
  • 每個 EARS-N SR 必須至少有一個正面的伴隨 SR

步驟 5:欄位規格表

針對具有資料輸入/顯示的功能,在 SR 區段中新增欄位規格表:

欄位 ID名稱標籤類型最小值最大值單位預設值必填UI 暴露驗證規則錯誤訊息父 SR

UI 暴露值:editable | display-only | hidden。

步驟 6:Echo Gate

針對每個 SR 子句,撰寫一行可測試的斷言:

VERIFY: [SR-NNN.c1] — [將需求改寫為可測試的斷言]

若無法撰寫該斷言,則表示需求不可測試——請重新改寫。

步驟 7:完整性檢查

在宣告編寫完成前,執行 completeness.md 中的檢查清單。

大量輸入處理

當輸入超過約 200 個來源項目(例如大型 Excel 貼上)時:

  1. 將輸入拆分為每批 50 列。
  2. 針對每批: a. 讀取該批次。 b. 根據上述步驟將其轉錄為 Markdown 格式的 UN/PR/SR。 c. 附加至工作檔案(不要覆寫)。 d. 報告進度:「批次 / 完成;已草擬 項需求。」
  3. 所有批次完成後,對完整檔案執行完整性檢查。

若某批次包含模糊的輸入,請暫停並要求釐清後再繼續——請勿無聲地跳過任何列。

輸出路徑

預設:對於整合的 UN/PR/SR,輸出至 ./requirements/SPECIFICATION.md。使用者可覆寫。

更新現有檔案時,保留現有 ID——以接下來的順序編號附加新的 ID。

交叉引用語法(速查表)

relation_type::SOURCE->TARGET [ID-list]
類型方向用途
traces_to向前UN→PR, PR→SR, SR→TC, UN→Persona
derived_from向後PR→UN, SR→PR, TC→SR
validates驗證TC→SR
mitigates風險控制SR→RISK
conflicts_with矛盾any→any

識別碼格式

正則表達式:^(UN|PR|SR|TC)-\d{3}(\.[A-Z])?$

  • 基本 ID:UN-001、PR-001、SR-001
  • 子 ID(EARS-P 表格):PR-010.A、PR-010.B
  • 子句標記:SR-001.c1、SR-001.c2

參考檔案

  • ears-guide.md — 12 種 EARS 模式
  • templates.md — UN/PR/SR 區段的 Markdown 範本
  • completeness.md — 退出檢查清單(UN→PR→SR 涵蓋範圍)

相關技能