Community研究與資料分析github.com

claim-ledger

Claim ledger — 對大型 Markdown 報告或研究內容進行事實查核,逐點驗證,從風險最高的開始。具備穩定的點 ID、唯追加的判決日誌,以及腳本化的報告編輯功能。當被要求對長篇報告進行事實查核、驗證或稽核時,或要開始或繼續一個分類帳(如「啟動分類帳」、「下一批」),或要測量分類帳的漂移時使用。

claim-ledger 是什麼?

**Claim Ledger** 是一個為 AI 代理(如 Claude Code)設計的事實查核技能,用於對大型 Markdown 報告進行逐點驗證。系統會為報告中的每個論點分配一個穩定的 ID,並按照風險高低排序處理,優先處理對決策影響最大、證據最薄弱的論點。批次處理過程中,每個論點都需要經過「陳述 → 錯誤條件 → 最佳案例 → 搜尋 → 證據 → 判決 → 結果」的完整流程,所有數據必須透過腳本重新計算,並透過唯追加的判決日誌記錄歷史記錄。此技能支援 Claude Code、Cursor、Codex 等平台,特別適合需要詳細稽核和持續驗證的長篇研究報告、商業計畫或技術文檔。其內建的漂移檢測機制(每年 10 個批次執行一次)能確保判決品質的一致性,而設計決策更重視透明度。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/ryanwisth/claim-ledger/tree/HEAD/skill

Installed? Explore more 研究與資料分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

在你喜歡的 AI 中提問

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

說明文件

索賠分類帳(Claim Ledger)

報告中的每個要點都有一個穩定的 ID。索賠會分批檢查,風險最高的優先:每個索賠都會得到一個可測試的陳述、使其錯誤的條件、最佳案例以及引用證據。然後做出判決。修正會透過一個腳本就地重寫該要點,該腳本會備份報告並重新推導每個新數字。判決日誌是唯追加的,因此歷史記錄保存在那裡,而不是報告中。

此工具基於其首次使用的分類帳(一份商業計畫研究報告,2026 年 10 月:517 個索賠,29 個批次)構建。它第一個就找到了該報告的最大錯誤。

下面的 L 表示 python3 -I ~/.claude/skills/claim-ledger/ledger.py -c <project>/ledger.toml。

每個報告的設定,一次完成

  1. 設定檔。 為設定檔和資料挑選一個專案資料夾。執行 L init <report.md>:它會寫入 ledger.toml 並列出報告的標題。

  2. 規則。 在設定檔中:

    • 重要性: 3 = 某個決策或通過/不通過測試取決於該要點,2 = 計畫和金錢,1 = 其餘部分。
    • 僅在標記時檢查的類型: 來源、方法說明、使用者自己的決策、摘要。
    • 標籤關鍵字, 如果報告以其他方式標記其證據。
  3. 尾端規則:詢問使用者一次;這是他們的決定。 給他們第一個分類帳的數字。第 1-9 批次(風險最高)在 27% 的首次檢查中發現了問題。第 10-29 批次佔了 73% 的工作量,僅發現了 7% 的問題。提供三個選項:

    • 檢查每個要點;
    • 以某個比率抽樣檢查低優先級已發佈數據的要點;
    • 當某個批次的首次檢查問題率低於某個閾值時停止。

    將答案寫入 [tail]。

  4. 標記。 L sync 會備份報告,然後在每個要點第一行的末尾添加一個不可見的 <!-- cl:ID -->。告訴使用者報告現在帶有這些標記;L export clean.md 會寫出一個不含這些標記的副本。

  5. 交接。 在專案的 HANDOFF.md 中加入一個分類帳章節:設定檔路徑、命令、尾端規則。

完成條件: 同步程序報告了要點和索賠的數量,L queue 10 顯示了依賴於哪些要點進行決策,並且交接文件命名了設定檔。

每個批次(約 20 個要點)

  1. L template。 在每個批次開始時閱讀它,以便在壓縮後規則仍然是新的。第一個分類帳的模板從第 10 批次開始退化。
  2. L queue 20,然後 L show ID...。
  3. 按順序,每個要點: statement → wrong_if → best_case → 搜尋 → evidence → 判決 → result。
    • 首先在外部搜尋。 使用主要來源:文件、數據集、發布者自己的頁面。專案的筆記最後使用,並標記為 notes。
    • 在寫入任何數字之前, 使用 <data>/analysis/ 中的腳本計算每個數字。
    • 依賴項。 當一個要點變更時,L find <phrase> 會找到依賴於它的要點;在 flag 中列出它們的 ID。
  4. 撰寫批次。 記錄存放在 <data>/edits/batchNN-records.json。複製 edit-template.py 到 <data>/edits/batchNN.py 並填入:
    • E,編輯:每個要點就地重寫;
    • QUOTED,從來源複製的數字;
    • check(),它會重新推導每個其他添加的數字。
  5. 執行它。 先執行 python3 -I batchNN.py --check;修正它拒絕的所有內容;然後不帶 --check 執行它。
    • 一個不編輯任何內容的批次仍然會通過 E = [] 的腳本執行。
    • 腳本是編輯到達報告的唯一途徑。
  6. 報告。 重建專案擁有的任何渲染視圖(例如地圖)。將 L status 的內容貼到交接文件中,並將其第一行發布給使用者。

完成條件: 腳本執行乾淨,日誌增加了該批次的記錄,並且交接文件包含了新的狀態行和佇列頭。

鏈接批次

  • 連續執行。 一旦使用者說「開始」,就連續執行批次,之間無需提示,每次執行後發布狀態行。
  • 在停止規則處停止。 當 queue 印出 STOP RULE MET 時,回報比率並詢問使用者是否繼續。queue --all 會繼續。
  • 因使用者決策而停止: 金錢、聯繫任何人、由他們決定的決策。也為真正的障礙而停止,並說明原因。
  • 接近上下文限制時: 完成正在處理的批次,更新交接文件,並說明新的對話將從佇列頭繼續。
  • 稽核。 每 10 個批次和最後執行 L audit。
    • DRIFT 行表示後期的判決比早期的更薄弱。
    • 在呼叫分類帳完成之前,使用完整模板重新檢查後期 CONFIRMED 要點的隨機樣本。

重寫要點

  • 就地重寫。 該要點以清晰的方式說明正確的內容,附帶其來源,就好像它一直都是正確的一樣。日誌保留舊文字、證據和日期;L show ID 會列印歷史記錄。
  • 拆分要點: 將原始索賠保留在第一個片段中,因為標記停留在第一行。新的片段在相同運行中獲得 ID。
  • 在腳本外部進行的編輯 仍然會浮現。已檢查過但文字變更的索賠會以 CHANGED 狀態返回,需要新的判決。

自我檢查

同一個模型撰寫報告並檢查它。這是該方法的弱點,而此工具使其可見,而不是隱藏它。

  • 證據 type:
    • outside:為此檢查而讀取的獨立來源;
    • derived:腳本的算術運算,它會檢查數學但不會檢查其輸入;
    • notes:專案自己的材料,它顯示一致性,而非真相。
  • 僅限筆記。 僅以 notes 支持的 CONFIRMED 判決在顯示時會顯示為 CONFIRMED (notes only)。其 result 會顯示「與筆記相符;未找到外部來源」。
  • 最後, 為使用者列出重要性為 3 且其判決僅依賴於筆記或衍生證據的要點。這些是要他們自己對主要來源進行驗證的要點。

參考

  • 判決:
    • CONFIRMED:按原樣支持。
    • CORRECTED:曾經錯誤;報告現在說的是正確的。
    • EXPANDED:正確;報告現在包含了更多內容(範圍、警告、來源)。
    • CHALLENGED:存在一個可信的反對理由;報告說明了這一點。
    • UNKNOWN:尚未解決;報告說明了在哪裡可以找到答案。
  • 佇列順序:
    1. RE-CHECK,由較新記錄標記的要點;
    2. CHANGED;
    3. 按優先級排列的未決索賠,優先級 = 重要性 × 薄弱程度,相同時按報告順序。
  • **<data> 中的檔案:
    • points.json:註冊表,包括每個要點的原始文字;
    • verdicts.jsonl:唯追加的日誌;追加,切勿編輯任何一行;
    • edits/、analysis/、backups/ 和 view.md,人類可讀的視圖。
  • record 和編輯腳本拒絕的內容: L template 會列印完整清單。整個批次會被拒絕,不會寫入任何內容。
  • 自我測試: python3 -I ~/.claude/skills/claim-ledger/selftest.py 會印出 27 個 PASS 行。

設計決策

  • ID 標記位於要點第一行的末尾。 行首的註解會在 CommonMark 中開啟一個原始 HTML 區塊,因此該行其餘部分的 Markdown 將停止渲染。
  • 什麼算作一個要點: 葉級列表項、段落、表格行,以及擁有 12 個或更多自身單字的父級項目。一般報告在散文和表格中包含索賠,而不僅僅是項目符號。
  • 模板在程式碼中強制執行,一個錯誤的記錄會拒絕整個批次。 第一個分類帳的 best_case 在規則僅存在於對話中時,降至 0/28 的修正,而 wrong_if 降至 57%。
  • 除了 CONFIRMED 之外的判決需要要點的文字已變更(或 elsewhere: IDs)。CORRECTED 表示報告現在說的是正確的,因此工具會檢查它是否如此。
  • 每個添加的數字都必須在 check() 中重新推導,或在 QUOTED 中宣告並附帶其來源。 這使得第一個分類帳的第 3 批次規則(「在寫入每個數字之前計算它」)變得機械化。
  • 已編輯且已有判決的索賠 必須在同一批次中記錄或標記,因此沒有判決會默默失效。
  • 每個批次只有一個腳本,同時執行檢查、應用和記錄。 不可能發生半應用的批次。
  • 尾端規則已交付。 其範圍和成本由使用者決定。
  • 停止規則僅計算首次檢查,將 CORRECTED 和 CHALLENGED 視為問題。在第一個分類帳中,66 個早期問題中的 42 個來自重新檢查,這誇大了早期的比率。
  • 抽樣是確定性的(種子和 ID 的雜湊值),因此樣本在多次運行以及添加要點時保持不變。佇列也會印出估計的剩餘問題,附帶 95% 的上限。
  • 證據引用上限為 14 個單字,以保持在 15 以下。上限由 max_quote_words 設定。
  • 設定檔是 TOML,因為它允許註解並且 Python 原生讀取它。
  • 稽核已根據第一個分類帳進行檢查。 重播其 546 條記錄會重現 10 月 13 日的稽核結果:在批次 1-9 中,89 個首次檢查中有 24 個是問題,在批次 10-29 中,393 個中有 28 個是問題。它會標記漂移:wrong_if 從 99% 降至 55%,問題的 best_case 從 80% 降至 0%,每個記錄的證據從 1.71 降至 1.20。舊日誌沒有證據 type,因此它們被視為僅有筆記。

相關技能