Epic Harness

一個自我進化的 AI 程式設計智能體框架 — 3 條命令、26 個技能、1 條自主流水線,從你的失敗中學習。

需要記憶的更少。每次按鍵的智慧含量更高。每次會話都變得更聰明。

English | 日本語 | 한국어 | Deutsch | Français | 简体中文 | 繁體中文 | Português | Español | हिन्दी

Stars Forks Issues Last commit

License Version Rust Claude Code Buy Me a Coffee

一個 Claude Code 外掛,將 30+ 條命令整合為 **3 條命令 + 26 個自動觸發技能**,並**從你自己的失敗模式中進化出新技能**。

epic harness 功能

--- ![Demo](../../docs/demo/demo.gif) ### Web 控制面板 — 會話啟動時自動開啟 10 螢幕即時指標,涵蓋 eval 評分、工具統計、orbit 流水線、進化技能和掛鉤健康狀態。首次 Claude Code 會話時自動開啟 — 無需手動設定。

Dashboard Orbit Pipeline

```bash # 首次會話時自動啟動(預設:http://localhost:7700) # 在 ~/.harness/config.toml 中設定連接埠或停用: [dashboard] port = 7700 # 設為 0 以停用自動啟動 auto_open = true # 首次會話時開啟瀏覽器 ``` 螢幕:**Dashboard** · /orbit 流水線 · 命令(3) · 技能(26) · 即時智能體 · Eval 與 Evolve · 掛鉤(6) · 整合(6) · harness-mem · 設定 --- ## 功能說明 一條命令,就能端到端交付一個功能。技能會在你不知情的情況下自動觸發。每次會話後智能體都會變得更聰明。 ```bash $ /orbit "為登入 API 新增 JWT 驗證" → spec approved → go (TDD subagents) → check (PASS) → ship (PR + CI) → evolve ``` 也可以直接呼叫管道技能: ```bash /spec "為登入 API 新增 JWT 驗證" # 釐清需求 → SPEC-*.md /go # 自動規劃 → TDD 子智能體 → 4 分鐘 /check # 平行審查 + 安全 + 測試 → PASS /ship # 隔離測試 → PR → CI 綠燈 ``` 技能會在背景自動觸發 — 不需要額外命令: ``` 正在開發新功能? → tdd 觸發(強制 Red→Green→Refactor) 測試失敗? → debug 觸發(先找根因,不做盲修) 修改了 auth 或 DB? → secure 觸發(OWASP 檢查清單,不走捷徑) 檔案超過 200 行? → simplify 觸發(抽取、重新命名、簡化) ``` 會話結束後,**evolve 迴圈**會分析什麼壞了、生成針對性技能,並在下一次會話載入。今天卡在 TypeScript 建置失敗,下一次就有 `evo-ts-care` 技能幫你起跑。 --- ## 安裝 > **第一次使用?** 請閱讀[快速入門指南(5 分鐘)](../../docs/quickstart.md)。 epic-harness 以**外掛**形式分發 — 技能、掛鉤和 `harness-mem` MCP 伺服器直接從外掛佈局(`skills/`、`hooks.json`、`mcp_config.json`)載入。沒有 `install` 子命令,各工具直接從磁碟讀取外掛。 ### Claude Code(推薦) ``` /plugin marketplace add epicsagas/plugins /plugin install epic@epicsagas ``` 一步自動安裝二進位檔案、技能、掛鉤和 `harness-mem` MCP 伺服器。 ### Codex CLI ```bash codex plugin marketplace add epicsagas/plugins ``` 技能和智能體立即可用 — 無需額外步驟。 ### agy(Antigravity CLI) ```bash agy plugin install . ``` 27 個技能、掛鉤和 `harness-mem` MCP 伺服器從外掛的 `plugin.json` + `skills/` + `hooks.json` + `mcp_config.json` 自動發現。 ### 僅二進位(無外掛宿主) ```bash brew install epicsagas/tap/epic-harness # macOS / Linux (Homebrew) cargo binstall epic-harness # 預建二進位 (Rust) cargo install epic-harness # 從原始碼建置 ``` 沒有 Homebrew?使用安裝腳本: ```bash curl --proto '=https' --tlsv1.2 -LsSf \ https://github.com/epicsagas/epic-harness/releases/latest/download/install.sh | sh ``` Windows: ```powershell irm https://github.com/epicsagas/epic-harness/releases/latest/download/install.ps1 | iex ``` 二進位檔案在首次掛鉤執行時自動播種 `~/.harness/config.toml` 和 `HARNESS.md` — 無需安裝精靈或 `install` 步驟。 > 執行 `epic-harness --version` 驗證安裝。使用 `brew upgrade epic-harness` 或重新執行安裝腳本進行更新。 前置條件:**Git**。原始碼/二進位安裝還需要 [Rust 工具鏈](https://rustup.rs)。 ### 驗證 ```bash epic --version # 二進位已安裝 ls ~/.harness/ # 資料目錄(首次工作階段自動建立) ``` 在 Claude Code 工作階段中:`/evolve status` > **遙測**:使用量報告預設開啟(opt-out)。使用 `epic-harness telemetry status|on|off` 切換。 --- ## 遙測 epic-harness 預設收集**匿名**使用遙測(opt-out),以改進 hook 可靠性和技能進化。事件傳送到 Posthog。 **我們收集:** 命令名稱、持續時間、結果(成功/失敗)、失敗分類、hook 阻止/失敗事件 — 以及 `product`、`product_version`、`os` 和隨機 `install_id`(首次執行時產生的 UUID,儲存在 `~/.config/epic-harness/install-id`)。 **我們絕不收集:** 原始碼、檔案內容、檔案路徑、環境變數、金鑰或任何個人識別資訊。 **控制:** ```bash epic-harness telemetry status # 顯示目前同意狀態 epic-harness telemetry off # 停用(立即停止傳送) epic-harness telemetry on # 重新啟用 ``` 同意儲存在 `~/.config/epic-harness/telemetry-consent`。關閉時不傳送任何遙測。 --- ## 命令 | 命令 | 功能 | |---------|-------------| | `/orbit` | **完整自主流水線**:spec → go → check → ship → evolve 一次執行 | | `/team` | 瀏覽組織庫、聘請現有團隊,或設計新團隊(3–6 個智能體,同步到 `.claude/agents/`) | | `/evolve` | 手動進化觸發 — 分析工作階段、查看儀表板、檢查技能效果、回滾 | 管道階段(`/spec`、`/go`、`/check`、`/ship`、`/discover`)現在是**技能** — 根據上下文自動觸發,也可以按名稱直接呼叫。舊命令名透過別名路由繼續有效。 --- ## /orbit — 自主流水線 `/orbit` 將整個流水線包裝為一次自主執行。選擇模式後 — 其餘全程自動,直到 PR 建立。 ```mermaid flowchart TD START(["/orbit"]) --> MODE{"requirement?"}:::human MODE -->|"unclear"| WAIT["Interactive\n/discover → /spec\nthen 'orbit go'"]:::human MODE -->|"clear + complex"| COUNCIL["Council\n4-voice auto-spec"]:::auto MODE -->|"clear + simple"| DIRECT["Direct\nauto-spec"]:::auto WAIT --> SPEC_LOAD["Load spec"] COUNCIL --> SPEC_LOAD DIRECT --> SPEC_LOAD SPEC_LOAD --> GO["Go\nplan → TDD → integrate"]:::auto GO --> CHECK["Check\nreview + audit + test"]:::auto CHECK -->|"PASS / WARN"| SHIP["Ship\nisolated test → PR → CI"]:::auto CHECK -->|FAIL| RETRY{"retry < 3?"} RETRY -->|yes| GO RETRY -->|no| PAUSE["Pause\nuser decides"]:::human PAUSE -->|continue| GO PAUSE -->|abort| ABORT(["Abort"]) SHIP --> EVOLVE["Evolve\nauto-analyze session"]:::auto EVOLVE --> DONE(["Orbit Complete\nconsolidated report"]):::auto classDef human fill:#4a4a6a,stroke:#9b9bcc,color:#fff classDef auto fill:#1a5c3a,stroke:#4caf7d,color:#fff ``` **紫色** — 人工步驟:模式選擇(不明確 → 互動式)、3 次檢查失敗暫停。 **綠色** — 明確 + 複雜 → 委員會自動生成規格;明確 + 簡單 → 直接建構;兩者皆完全自主。 狀態持久化於 `$HARNESS_DIR/orbit/PIPELINE-{timestamp}.json` — 在上下文壓縮後仍可恢復。 > **注意**:智能體在修改 orbit 本身或僅編輯文件時可能繞過流水線。參見[已知問題(智能體判斷)](#已知問題智能體判斷)。 --- ## 自動技能(Ring 2) 技能根據上下文自動觸發。你不需要手動呼叫它們。 | 技能 | 觸發時機 | |-------|--------------| | **spec** | 需要定義需求時 — 轉換為編號的 R + AC 文件 | | **go** | 建構階段 — 自動規劃 → TDD 子代理 → 平行執行 → AC 驗證 | | **check** | 審查階段 — 平行程式碼審查 + 安全稽核 + 測試,按範圍附加檢查 | | **ship** | 發佈階段 — 隔離測試 → 包含完整檢查報告的 PR → CI 監控 + 自動修復 | | **audit** | 完整稽核 — 平行程式碼品質 + 安全 + 測試審查,含語意去重 | | **eval** | 品質回歸評估,含基線比較 — 正確性、效能、品質 | | **tdd** | 新功能實作或錯誤修復 | | **debug** | 測試失敗或執行時期錯誤 | | **discover** | 模糊的請求、先給出解決方案而無問題描述、無焦點的抱怨 | | **secure** | 涉及 Auth / DB / API / secrets 的程式碼 | | **threat-model** | 安全範圍界定 — 信任邊界列舉、威脅行為者、情境 → THREAT_MODEL.md | | **vuln-scan** | 系統化漏洞掃描 — 注入、驗證、資料暴露、依賴項 → VULN-FINDINGS.json | | **triage** | 對抗性驗證 — 嚴重性調整、鏈式分析、根因分組 → TRIAGE.json | | **perf** | 迴圈、查詢、渲染、批次操作 | | **simplify** | 檔案超過 200 行或圈複雜度過高 | | **document** | 新增或修改了公開 API 簽名 | | **verify** | 在完成 `/go` 或 `/ship` 之前 | | **context** | 上下文視窗使用超過 70% | | **council** | 模糊的架構或設計決策 | | **orchestrate** | 多代理編排狀態和即時代理干預 | | **agent-introspection** | 連續 3 次以上失敗或循環重試模式 | | **reflect** | 按需觸發:你是否將 AI 作為思考放大器?基於冷證據的自我評估 | | **commit** | 約定式提交生成 — 從 git diff 自動生成 | > **Token 預算注意事項:** Claude Code 會將技能描述載入每個會話的上下文中。epic 的 26 個技能在預設的 `skillListingBudgetFraction: 0.01`(1%)內可容納。如果你安裝了額外技能(例如 episteme、alcove、obscura),合計總數可能超過預算並觸發「descriptions dropped」警告。在 `~/.claude/settings.json` 中加入以下設定以修正: > > ```json > "skillListingBudgetFraction": 0.02 > ``` > > 如果安裝了 20+ 個技能,請使用 `0.03`。 --- ## 進化(Ring 3) 框架會監控每次工具呼叫,在 3 個維度上評分,偵測失敗模式,並生成針對性技能 — 在工作階段結束時自動完成。 ### 評分 ``` composite = 0.5 × tool_success + 0.3 × output_quality + 0.2 × execution_cost ``` 失敗分類(9 種):`type_error` · `syntax_error` · `test_fail` · `lint_fail` · `build_fail` · `permission_denied` · `timeout` · `not_found` · `runtime_error` ### 模式偵測 | 模式 | 偵測內容 | 預設閾值 | |---------|---------|-------------------| | `repeated_same_error` | 相同錯誤出現 N+ 次 | 3 | | `fix_then_break` | 編輯成功 → 建置/測試失敗 | 回溯 3 步,2 個週期 | | `long_debug_loop` | 卡在同一檔案 | 5 次操作 | | `thrashing` | Edit↔Error 交替出現 | 3 次編輯,3 次錯誤 | ### 進化流程 ``` Observe (PostToolUse — 3-axis scoring) ↓ obs/session_{id}.jsonl Analyze (SessionEnd) ↓ per-tool, per-ext scores + patterns Propose (Solver — graduated by score: ≥0.90 skip, ≥0.70 moderate, <0.70 full) ↓ SkillProposal[] with confidence Curate (Accept/Merge/Skip, feedback masked from solver) ↓ evolved/{skill}/SKILL.md + meta.json Gate (format check, dedup, cap 10, gated promotion ≥ 3 sessions) ↓ evolved_backup/ (best checkpoint) Instinct (high-success patterns → cross-project memory.db nodes) ↓ Reload (next session — resume loads evolved skills) ``` 技能播種:弱工具(成功率 <60%,最少 5 次觀測)、弱檔案類型(成功率 <50%,最少 3 次觀測)、高頻錯誤(5+ 次出現)。 停滯處理:連續 3 個工作階段無 5% 改善 → 自動回滾到最佳檢查點。 ### SkillOpt 啟發的最佳化 三種受深度學習啟發的技術,改編自 [SkillOpt](https://arxiv.org/abs/2605.23904): | 技術 | 運作方式 | |-----------|-------------| | **負反饋緩衝區** | 被拒絕的提案以 TTL 為基礎的過期機制儲存;未來的提案在生成前會先對照緩衝區檢查 | | **小批次反思** | 觀測資料分解為固定大小的批次以進行結構化模式提取;當主要錯誤 ≥60% + ≥2 個不同檔案時可重複使用 | | **慢速/元更新** | 對最近 5 個工作階段進行線性迴歸,將 epoch 分類為 Improving / Regressing / PersistentFailure / StableSuccess;自動淘汰表現不佳的技能 | ### 提示詞自動調校 表現不佳的進化技能會收到針對性的調校指引,附加在 `` 分隔符之後。原始內容永不修改。連續 3 個下降的工作階段 → 自動回滾調校,歷史記錄清除。 ### 技能有效性 每個進化技能都透過 A/B 歸因追蹤: ``` /evolve history → Skill Effectiveness | Skill | With | Without | Delta | |--------------------|------|---------|-------| | evo-ts-care | 0.87 | 0.72 | +15% | | evo-bash-discipline| 0.65 | 0.68 | -3% | ``` 正增量 = 有效。負增量 = 考慮透過 `/evolve rollback` 移除。 ### 冷啟動預設 首次工作階段時,會根據偵測到的技術堆疊自動套用適合的預設技能: | 技術堆疊 | 預設 | |-------|---------| | Node.js/TypeScript | `evo-ts-care`、`evo-fix-build-fail` | | Go | `evo-go-care` | | Python | `evo-py-care` | | Rust | `evo-rs-care` | ### 直覺學習 高成功率模式被提取並在專案間推廣: ``` observe (100% confirmed) → extract_instincts() → instinct node (confidence ≥ 0.8) → promote to global when observed in ≥ 2 projects ``` ```bash /evolve # 立即執行 /evolve status # 儀表板:評分、趨勢、模式、技能 /evolve history # 完整歷史 + 技能效果 /evolve cross-project # 跨專案模式分析 /evolve rollback # 恢復上一個最佳版本 /evolve reset # 清除所有進化資料 ``` --- ## 安全流水線 三階段漏洞評估流水線,移植自 [defending-code](https://github.com/anthropics/defending-code-reference-harness): ```bash /threat-model # 1. 信任邊界、威脅行為者、情境 → THREAT_MODEL.md /vuln-scan # 2. 4 維度掃描器(注入、驗證、資料暴露、依賴項) → VULN-FINDINGS.json /triage # 3. 對抗性驗證、嚴重性調整、鏈式分析 → TRIAGE.json ``` ### 稽核 `--strict` 模式 用於安全評估專案,`--strict` 模式強制各稽核模式之間的獨立性: - 程式碼、安全和測試審查者僅收到 diff + spec — 不含建構者上下文 - 交叉檢查獨立性:各模式在綜合之前各自獨立執行 - 盲評分防止錨定偏差 可選的評估專案上下文,透過專案根目錄的 `.harness/engagement.md` 提供(授權、範圍、限制、排除)。參見 `docs/references/engagement.md` 取得範本。 --- ## 掛鉤(Ring 0) 在每個工作階段中無感執行。單一 Rust 二進位檔案(`epic-harness`),含多個子命令。 | 掛鉤 | 時機 | 功能 | |------|------|------| | **resume** | 工作階段啟動 | 恢復上下文、載入記憶、偵測技術堆疊 | | **guard** | Bash 執行前 | 阻止強制推送到 main、`rm -rf /`、DROP 生產庫 | | **polish** | Edit 執行後 | 自動格式化(Biome/Prettier/ruff/gofmt)+ 型別檢查 | | **observe** | 每次工具呼叫 | 記錄到 `~/.harness/projects/{slug}/obs/`,用於進化 | | **snapshot** | 壓縮前 | 將狀態儲存到 `~/.harness/projects/{slug}/sessions/` | | **reflect** | 工作階段結束 | 分析失敗、播種進化技能、門控、提取直覺 | Polish 回饋至 observe:格式化失敗 → `lint_fail`,TypeScript 錯誤 → `build_fail`。即使錯誤來自 polish,Edit→Error 抖振也會被偵測到。 每個工作階段寫入各自的 `session_{date}_{pid}_{random}.jsonl` — 多個並行工作階段不會互相損壞資料。 ### 掛鉤設定檔 透過 `~/.harness/config.toml` 或 `EPIC_HOOK_PROFILE` 環境變數設定: | 設定檔 | 啟用的掛鉤 | |---------|-------------| | `minimal` | guard、observe、resume | | `standard`(預設) | 以上 + polish、reflect、snapshot | | `strict` | 所有掛鉤 + 未來的 strict-only 檢查 | ### 自訂守衛規則 在專案根目錄的 `.harness/guard-rules.yaml` 中新增專案專屬規則: ```yaml blocked: - pattern: kubectl\s+delete\s+namespace | msg: Namespace deletion blocked warned: - pattern: docker\s+system\s+prune | msg: Docker prune — verify first ``` --- ## 團隊(`epic team`) 團隊是**組織級別**的,不綁定到特定專案。在任意專案中執行 `/team` 都會豐富共享的智能體定義池 — 不會靜默覆寫。 ```bash epic team # 互動式:掃描 → 設計 → 寫入 → 同步 epic team sync backend # 調度智能體 → .claude/agents/backend/ epic team link backend # 調度 + 在團隊設定中註冊專案 epic team list # 目前組織的所有團隊 epic team list --org netflix # 指定組織的團隊 epic team show backend --playbook # 設定 + 完整 playbook epic team delete backend # 僅從目前專案撤銷 epic team delete backend --global # 從組織儲存中永久刪除 ``` 同步後,下次工作階段中即可使用智能體:`@domain-expert`、`@reviewer`、`@tester` 等。 | 類型 | 關鍵字 | 預設智能體 | |------|---------|---------------| | Stream-aligned | `stream` | domain-expert、reviewer、tester | | Platform | `platform` | api-designer、infra-specialist、dx-agent | | Enabling | `enabling` | specialist | | Complicated Subsystem | `subsystem` | domain-specialist、integration-tester | 多組織支援:`epic team --org netflix` — 每個組織有獨立的拓撲結構。 合併策略:變更的智能體會提示確認(預設:保留現有,備份到 `.history/`)。Playbook 始終附加。 --- ## 多工具支援 所有工具共享同一個 `~/.harness/projects/{slug}/` 資料目錄。 | 工具 | Ring 0 掛鉤 | 命令 | 技能 | 智能體 | |------|-------------|----------|--------|--------| | **Claude Code** | ✓ 完整 | ✓ 3 條命令(含 /orbit) | ✓ 26 個技能 | Live | | **Codex CLI** | ✓ 完整¹ | ✓ 3 條提示詞(含 /orbit) | ✓ 26 | — | | **Antigravity** | ✓ 部分² | ✓ 3 條命令(含 /orbit) | ✓ 26 | — | ¹ `plugin_hooks = true` 在 `~/.codex/config.toml` · ² 僅 PreInvocation/PostInvocation — 無 PreToolUse(guard/polish 不可用) --- ## 架構:4-Ring 模型 ```mermaid flowchart TB subgraph R0["Ring 0 — Autopilot (hooks, invisible)"] direction LR h1(resume) --- h2(guard) --- h3(polish) --- h4(observe) --- h5(snapshot) --- h6(reflect) end subgraph R1["Ring 1 — Commands (you call these)"] direction TB subgraph orbit_wrap[" /orbit "] direction LR c1("spec") --> c2("go") --> c3("check") --> c4("ship") --> c5("evolve") end c6("/team") c7("/evolve (manual)") end subgraph R2["Ring 2 — Auto Skills (context-triggered)"] direction LR s1(spec) --- s2(go) --- s3(check) --- s4(ship) --- s5(tdd) --- s6(debug) --- s7(secure) --- s8(perf) --- s9(simplify) --- s10(verify) --- s11(audit) --- s12(eval) --- s13(threat-model) --- s14(vuln-scan) --- s15(triage) end subgraph R3["Ring 3 — Evolve (self-improving)"] direction LR e1(observe) --> e2(analyze) --> e3(seed) --> e4(gate) --> e5(reload) end R0 -->|"observe every tool call"| R3 R3 -.->|"evolved skills"| R2 R1 -->|"auto-trigger skills"| R2 R0 -->|"resume: restore context"| R1 ``` --- ## 跨專案學習 選擇加入以在專案間共享失敗模式: ```bash touch ~/.harness/projects/{slug}/.cross-project-enabled ``` 工作階段結束 → 將匿名化模式匯出到 `~/.harness/global_patterns.jsonl`。工作階段開始 → 顯示來自其他專案薄弱領域的提示。 --- ## 統一記憶 所有智能體共享儲存於 `~/.harness/memory.db` 的知識圖譜(SQLite,含全文搜尋)。無需外部執行時期。 ``` score = recency(25%) + importance(35%) + access_frequency(15%) + FTS_match(25%) ``` ### CLI ```bash epic mem recall "auth refactor" --project my-project # 智慧檢索 epic mem add --title "JWT rotation" --type decision # 新增節點 epic mem search "JWT" # FTS5 搜尋 epic mem list --type decision --project my-project # 過濾 epic mem context --project my-project # 專案上下文 epic mem serve # Web UI → :7700 或使用 --port 8800 自訂連接埠 epic mem mcp-install # 註冊 MCP 伺服器 epic mem export --out ./docs/memory # 匯出為 Markdown ``` ### MCP 工具(6 個) | 工具 | 用途 | |------|---------| | `mem_recall` | 基於提示 + 專案 + 圖鄰居的智慧上下文檢索 | | `mem_add` | 按類型自動設定重要性新增節點(或顯式 0.0–1.0) | | `mem_search` | 關鍵字搜尋(全文),按重要性排序 | | `mem_query` | 按標籤/類型/專案過濾 | | `mem_context` | 專案範圍的智慧檢索(無提示) | | `mem_related` | 從節點 ID 進行圖遍歷(發現關聯知識) | ### 節點類型 | 類型 | 建立方式 | 重要性 | |------|-----------|------------| | `decision` | 手動 / MCP | 0.9 | | `resolution` | 手動 / MCP | 0.8 | | `concept` | 手動 / MCP | 0.7 | | `project` | 手動 / MCP | 0.7 | | `instinct` | 自動(reflect) | 0.7 | | `pattern` | 自動(reflect) | 0.5 | | `error` | 自動(reflect) | 0.4 | | `session` | 自動(reflect) | 0.2 | 生命週期:超過 30 天未存取 → 重要性衰減 10%(下限 0.05)。超過 180 天 → 標記為 `stale`,從檢索中排除。`pinned` 標籤可防止衰減。 ---
專案資料 — 目錄結構 ## 專案資料 所有資料儲存於 `~/.harness/`(家目錄),而非你的專案根目錄。專案刪除後資料仍然存在,不會污染 git 歷史。 ``` ~/.harness/ ├── memory.db # SQLite 知識圖譜(節點 + 邊 + FTS5) ├── graph.json # 快取的圖(用於 Web UI) ├── config.toml # 使用者設定 ├── global_patterns.jsonl # 跨專案模式(選擇加入) ├── orgs/ # 團隊全域儲存 │ └── {org}/teams/{team}/ │ ├── config.json, mission.md, playbook.md, agents/, .history/ └── projects/{slug}/ ├── memory/ # 專案模式和規則 ├── sessions/ # 工作階段快照(用於恢復) ├── obs/ # 工具使用觀測日誌(JSONL) ├── evolved/ # 自動進化的技能 │ ├── manifest.json │ └── {skill}/SKILL.md + meta.json ├── evolved_backup/ # 最佳檢查點(用於回滾) ├── dispatch/ # 技能調度日誌 ├── evolution.jsonl # 完整進化歷史 └── metrics.json # 彙總統計 + 技能歸因 ``` 將安全規則與團隊共享:在專案根目錄放置 `.harness/guard-rules.yaml`(提交到 git)。
---
設定 — config.toml 參考 ## 設定 所有可調整參數均在 `~/.harness/config.toml` 中。缺省 = 硬式編碼預設值。 ```toml # 優先順序:環境變數(EPIC_HOOK_PROFILE)> 本檔案 > 預設值 [hook] profile = "standard" # "minimal" | "standard" | "strict" gateguard_hints = true [scoring] weights = [0.5, 0.3, 0.2] # [success, quality, cost] [evolution] max_skills = 10 stagnation_limit = 3 improvement_threshold = 0.05 gated_promotion_min = 3 [pattern] # repeated_error_min = 3 # debug_loop_min = 5 # graduated_scope_skip = 0.90 # graduated_scope_moderate = 0.70 [instinct] # confidence_threshold = 0.8 # promotion_min_projects = 2 # max_instincts = 20 # min_observations = 10 # min_avg_score = 0.5 ```
--- ## 已知問題(智能體判斷) 這些問題源於智能體對上下文的解釋,而非程式碼缺陷。列出這些是讓使用者知道需要注意什麼。 ### 已發現問題 | 問題 | 觸發條件 | 現象 | 解決方法 | |------|---------|------|---------| | **Orbit 自我修改繞過** | 請求 `/orbit` 改進 orbit 自身 | 智能體可能跳過整個 orbit 流水線,直接在 main 分支上臨時編輯檔案,沒有 spec/PR/可追溯性,變更處於未提交狀態 | orbit 完成後檢查 `git status`。如果 main 上有變更但沒有流水線狀態,手動提交或從單獨的分支重新執行 `/orbit` | | **純文件任務跳過協議** | 向 `/orbit` 提供僅 Markdown 的變更(無測試程式碼) | 智能體可能判斷 TDD/測試階段無意義而跳過整個流水線 | 純文件變更可接受。混合程式碼 + 文件時,確保程式碼相關階段未被跳過 | | **模式誤判** | 請求處於 Direct 和 Council 的邊界 | 智能體可能選擇 Direct 而 Council(4 方審查)會發現更多邊界情況,或反之 | 如果智能體的模式選擇看起來不合適,明確指定「使用 Council 模式」或「使用 Direct 模式」 | ### 刻意保留的設計選擇 以下選擇曾考慮增強,但經評估後維持現狀: | 選擇 | 未增強的原因 | 依據 | |------|------------|------| | **僅在 Go 階段進入工作樹** | 可以從 preflight 開始隔離 | Preflight/mode/spec 是唯讀的。更早隔離增加複雜度但無收益 — 分支本身在 Go 階段才建立 | | **Ship 後保留工作樹** | 可以在 PR 合併後自動刪除 | 分支是 PR 的 head 引用。合併前刪除會損壞 PR。清理留給使用者在合併後處理 | | **分支名使用 `orbit-{slug}` 而非 `feature/{slug}`** | 可以匹配常規分支命名 | `EnterWorktree` 不允許名稱中包含 `/`。建立後重新命名僅增加步驟,只有外觀上的收益 | | **純文件變更無輕量流程路徑** | 可以偵測 doc-only 並跳過 TDD/測試 | 偵測不可靠(什麼算「文件」?)。協議複雜度增加的代價大於邊際收益 | --- ## 疑難排解
安裝後出現 command not found: epic 將 Cargo bin 目錄加入你的 PATH: ```bash export PATH="$HOME/.cargo/bin:$PATH" ``` 將此行加入你的 `~/.zshrc` 或 `~/.bashrc` 使其永久生效。
掛鉤在 Claude Code 中未觸發 重新安裝外掛以重新載入掛鉤: ``` /plugin install epic@epicsagas ``` 然後重新啟動 Claude Code。掛鉤從外掛的 `hooks.json` 載入。
macOS 上出現 Permission denied(Gatekeeper) macOS 可能會封鎖從網路下載的未簽名二進位: ```bash xattr -d com.apple.quarantine ~/.cargo/bin/epic-harness xattr -d com.apple.quarantine ~/.cargo/bin/epic ```
epic:外掛掛鉤內找不到二進位 外掛會先在 `hooks/bin/epic-harness` 尋找二進位。透過 `cargo install` 更新後,請複製它: ```bash cp ~/.cargo/bin/epic-harness hooks/bin/epic-harness ```
--- ## 開發 ```bash cargo install --path . # 建置 + 安裝 cp ~/.cargo/bin/epic-harness hooks/bin/epic-harness # 更新外掛二進位 cargo test # 測試 ``` 掛鉤在兩處尋找二進位:`hooks/bin/epic-harness`(外掛本地)→ `~/.cargo/bin/epic-harness`(PATH)。 --- ## 連結 - [更新日誌](../../CHANGELOG.md) — 發佈歷史 - [貢獻指南](../../CONTRIBUTING.md) — 如何貢獻 - [安全政策](../../SECURITY.md) — 回報漏洞 - [Issues](https://github.com/epicsagas/epic-harness/issues) — 錯誤回報和功能請求 ## 致謝 - [a-evolve](https://github.com/A-EVO-Lab/a-evolve) — 自動化進化與基準測試模式 - [agent-skills](https://github.com/addyosmani/agent-skills) — Claude Code 智能體技能系統 - [everything-claude-code](https://github.com/affaan-m/everything-claude-code) — 全面的 Claude Code 模式 - [gstack](https://github.com/garrytan/gstack) — 外掛架構參考 - [harness](https://github.com/revfactory/harness) — 掛鉤與框架基礎設施模式 - [serena](https://github.com/oraios/serena) — 自主智能體設計 - [SuperClaude Framework](https://github.com/SuperClaude-Org/SuperClaude_Framework) — 多命令框架架構 - [superpowers](https://github.com/obra/superpowers) — Claude Code 擴充模式 ## 授權條款 [Apache 2.0](../../LICENSE)