Communitygithub.com

BEKO2210/SkillQuarry

代理技能開放市場

SkillQuarry 是什麼?

Cordon 是一個專為編碼代理變更設計的「事後接受層」。它在代理執行完成後,快照當前 Git HEAD、記錄明確的倉庫相對路徑與大小策略,並僅當 Git 可見的變更符合此策略且所有獨立的驗證器皆以零狀態退出時,才接受結果。此工具支援兩種模式:供應商中立的「arm/check」模式(可搭配任何代理使用),以及直接包裝 Claude Code 的「run」模式(支援 `cordon resume` 重試)。Cordon 適用於需要以程式碼嚴格驗證「代理僅能修改特定路徑」的場景,但它並不提供沙箱保護——被忽略的檔案、惡意程序或作業系統層級的限制繞過都不在其證明範圍內。其狀態儲存於 `.cordon/` 目錄,並使用 `fsync`、`os.replace` 與作業系統建議鎖定來確保原子性與競爭安全。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add BEKO2210/SkillQuarry

在你喜歡的 AI 中提問

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

說明文件

Cordon — 確定性變更信封

Cordon 是一個專為編碼代理變更設計的「事後接受層」。它快照當前 Git HEAD,記錄明確的倉庫相對路徑與大小策略,並僅當 Git 可見的變更符合此策略且所有獨立的驗證器皆以零狀態退出時,才接受結果。

在「代理僅該觸碰 X」這件事必須由程式碼檢查、而非靠代理記憶時,請使用 Cordon。請勿將 Cordon 稱為沙箱:被忽略的檔案不在其 v1 證據模型範圍內,且具有不受限制檔案系統存取的行程可以竄改 Cordon 自身的狀態。

選擇模式

供應商中立:arm、執行任何代理、檢查

cordon arm "只更新 parser" \
  --allow "src/parser/**" \
  --allow "tests/parser/**" \
  --deny "src/parser/generated/**" \
  --max-files 8 \
  --max-added-lines 400 \
  --max-deleted-lines 200 \
  --verify "python3 -m unittest discover -s tests"

# 自行執行編碼代理。
cordon check

此模式從不呼叫 AI 服務。

Claude Code 包裝器

cordon run "修正 parser 回歸問題,不改變 generated 檔案。" \
  --allow "src/parser/**" \
  --allow "tests/parser/**" \
  --deny "src/parser/generated/**" \
  --verify "python3 -m unittest discover -s tests" \
  --max-files 8 \
  --max-added-lines 400 \
  --max-deleted-lines 200 \
  --max-turns 20 \
  --max-budget-usd 2

Cordon 會啟動一個全新的 claude -p 程序,使用 JSON 輸出、停用工作階段持久化、並啟用權限模式 acceptEdits。若執行失敗或中斷,可以透過 cordon resume 以新程序重試,但僅當部分的 Git 可見變更仍符合已設定的信封、且嘗試次數上限尚未達到時為限。

讀取結果

退出碼意義
0稽核已接受
2Cordon 拒絕操作,或狀態/策略無效
3代理/程序已完成,但 Git 政策或某驗證器拒絕了結果
4包裝的 Claude 程序失敗、逾時或超出擷取輸出限制

cordon status 報告當前階段與上次稽核結果。cordon reset 僅移除 .cordon/;它不會還原、刪除或提交倉庫檔案。

策略規則

  • 至少需要一個 --allow 模式。
  • --deny 永遠優先於 --allow。
  • 模式是相對於倉庫的 Cordon glob:* 不跨越 /,** 會跨越,而 ? 匹配一個非 / 字元。
  • Cordon 拒絕類絕對路徑模式(/x、./x)、NUL 位元組以及明確的 . / .. 路徑區段。
  • HEAD 移動預設被拒絕。僅當提交是任務中預期的一部分時,才使用 --allow-commits。
  • 預算為包含性:剛好達到限制會被接受;超過一個單位則被拒絕。
  • 驗證器使用 shlex.split 解析並直接執行,而非透過 shell。因此 &&、管道和重新導向等 shell 運算子不會被解譯。

狀態與復原

Cordon 將狀態儲存在 .cordon/ 中,並在 .git/info/exclude 中註冊 /.cordon/。它永遠不會編輯 .gitignore。

當某個被追蹤的檔案帶有 assume-unchanged 或 skip-worktree 索引旗標時,Cordon 也會拒絕設定,因為此類檔案無法接受稽核。請使用 git update-index --no-assume-unchanged <path> 清除該旗標,而非設法繞過。

對 Cordon 語義狀態的寫入採用 temp-file + fsync + os.replace。透過 Git 後設資料解析的零長度同步 inode(cordon.lock)會以作業系統建議鎖定持有;它不屬於 .cordon/ 狀態的一部分,且在鎖定時絕不會被替換。該鎖可防止兩個 Cordon 操作同時擁有相同的倉庫狀態,包括 arm/setup 加上包裝的代理嘗試。Claude 嘗試在子程序啟動前會被標記為 running;鍵盤中斷會持久化為 interrupted;引擎錯誤會被持久化,且可能可以恢復。

Cordon 證明了什麼——以及它未證明什麼

對於其所執行的已設定基準線與 Git 實作,Cordon 可以證明,在稽核時觀察到的 Git 可見(被追蹤的變更加上未被忽略的未追蹤檔案)符合其策略,且所設定的驗證器程序以零狀態退出。

它未證明:

  • 被忽略的檔案未被觸碰;
  • 倉庫對於能夠改寫狀態的惡意程序是安全的;
  • 驗證器在邏輯上是正確的;
  • 代理執行環境中的權限/鉤子無法被繞過;
  • 程式碼僅因 diff 很小就是安全的。

接受後仍請審查 diff。Cordon 是一個確定性閘門,而非程式碼審查或作業系統層級沙箱的替代品。

完整實作與邊界細節:README.md。原始證據:RESEARCH.md。可重現的測試與已知限制:TEST_REPORT.md。

相關技能