Verify every receipt in ./receipts/receipts.jsonl against the signer's public key. Detects tampered or malformed receipts across the audit trail.
复制下面这句话,粘贴给 Claude Code、Codex、Cursor 等 AI 编程工具,它会读取安装说明并在你确认后完成安装。
请阅读 https://ai.atlankj.com/install/asset/gh-agents-ffde0415eb40 ,按照其中的说明把「audit-chain」安装到你(当前 AI 工具)中。执行前先告诉我将运行的命令和写入的位置,等我确认。
查看 AI 将读取的安装说明正在读取 GitHub 原文…
内容来自 GitHub 原始文件,由原作者维护。在 GitHub 查看
Verify every receipt in the audit trail, not just a single receipt.
protect-mcp 0.7.4 appends receipts to receipts.jsonl in ./receipts/ (or
the specified directory), one per line, and this command checks the signature
on each line.
/audit-chain # Verify all receipts in ./receipts/
/audit-chain --last 50 # Verify only the last 50 receipts
/audit-chain --dir /var/log/receipts # Use a different directory
receipts.jsonl in the target directory--last N is givenpublicKey value in
./protect-mcp.key (or the file named by PROTECT_MCP_KEY)--last N, the
verifier numbers the selected lines from 1, so the command prints the
offset to add to get the line in receipts.jsonlprotect-mcp 0.7.4 receipts carry no link to the previous receipt, so this check cannot detect a deleted, inserted, or reordered line. To detect deleted lines, keep a copy of the receipts file where the operator cannot change it.
RECEIPT_DIR="./receipts"; N=""
while [ $# -gt 0 ]; do
case "$1" in
--last|--dir)
if [ $# -lt 2 ]; then
echo "usage: /audit-chain [--last N] [--dir path]" >&2; exit 2
fi
if [ "$1" = "--last" ]; then
case "$2" in
''|*[!0-9]*) echo "--last takes a positive whole number" >&2; exit 2 ;;
esac
N="$2"
else
RECEIPT_DIR="$2"
fi
shift 2 ;;
*) shift ;;
esac
done
FILE="$RECEIPT_DIR/receipts.jsonl"
if [ -n "$N" ]; then
N=$((10#$N))
[ "$N" -gt 0 ] || { echo "--last takes a positive whole number" >&2; exit 2; }
TOTAL=$(wc -l < "$FILE"); OFFSET=$(( TOTAL > N ? TOTAL - N : 0 ))
echo "Checking lines $((OFFSET + 1)) to $((TOTAL)). Add $OFFSET to each reported line number."
TMP="$(mktemp)"; tail -n "$N" "$FILE" > "$TMP"; FILE="$TMP"
fi
PUB=$(node -p 'JSON.parse(require("fs").readFileSync(process.env.PROTECT_MCP_KEY || "./protect-mcp.key")).publicKey')
npx @veritasacta/verify@0.9.2 --replay-chain "$FILE" --key "$PUB"
Exit 0 means every receipt verified. Exit 1 means at least one receipt
failed, because it was tampered with, a line is malformed, the key is wrong or
missing, or the algorithm is unsupported. With --replay-chain, the verifier
reports those cases per line with exit 1. Exit 2 means the check could not
run, e.g., because the file could not be read or an option had no value.
npx downloads @veritasacta/verify@0.9.2 the first time it runs. For an
offline machine, install it in the project first with
npm install --no-save @veritasacta/verify@0.9.2, and npx then runs the
local copy without network access.
Audit verification: PASSED
Scanned: 247 receipts in ./receipts/receipts.jsonl
Signatures: 247/247 valid ✓
Key: 0faf558a90dfbf88...
All 247 receipts verify. A deleted or reordered line would not show here,
because 0.7.4 receipts carry no link to the previous receipt.
Audit verification: FAILED
Scanned: 247 receipts
Signatures: 246/247 valid (1 failed)
FAILED at line 89: invalid_signature
Request: tu-1790427588265-c8x5
Tool: Bash
Issued at: 2026-09-26T14:22:01Z
The signature on this line does not verify, so the receipt was modified
after signing, or the key is not the signer's key. Compare the line against
a known-good copy to find the altered field.
/verify-receipt for single-receipt verification