Skip to main content

Core product

Ledger of agent actions

Parse records the tool names and file-path globs an agent declares — then seals each row into an append-only SHA-256 chain. You forward the page. A reviewer can recompute the hashes.

This is not an endpoint agent. Paths and digests only. No file contents. No prompt text. No kernel monitor. Logging is not a control.

Replay today’s allowlist against a session: GET /v1/ledger/sessions/:id/replay. Hypothetical.

See a sample session Install the HTTP hook Screen an email first

Who this is for

Technical directors and staff engineers whose agents sit in front of client input. The security review asks two questions: what would the agent have executed, and what did it actually touch? Attack Pack answers the first. Ledger answers the second.

Install — HTTP hook, not an npm package

Logging is not a control. The hook declares tool names and path globs. No file contents. No prompt text. There is no npx installer.

Mint a key at /get-started, then prove the round-trip:

export PARSE_API_KEY=pfa_live_…
curl -sS -X POST https://www.parsethis.ai/v1/ledger/event \
  -H "Authorization: Bearer $PARSE_API_KEY" -H "Content-Type: application/json" \
  -d '{"agent_id":"claude-code","session_id":"sess_demo","kind":"tool_call","tool":"Read","path_glob":"~/clients/*/invoice.md","source":"claude-code-hooks"}'
curl -sS "https://www.parsethis.ai/v1/ledger/events?session_id=sess_demo" \
  -H "Authorization: Bearer $PARSE_API_KEY"

Weekly motion: save this as ~/.claude/hooks/parse-ledger.sh (executable), then paste settings.json.

#!/bin/sh
payload=$(python3 -c 'import json,sys; e=json.load(sys.stdin); i=e.get("tool_input") or {}; p=i.get("file_path") or i.get("path") or "*"; print(json.dumps({"agent_id":"claude-code","session_id":e.get("session_id") or "local","kind":"tool_call","tool":e.get("tool_name") or "unknown","path_glob":str(p)[:512],"source":"claude-code-hooks"}))')
curl -sS -X POST "${PARSE_LEDGER_URL:-https://www.parsethis.ai/v1/ledger/event}" \
  -H "Authorization: Bearer $PARSE_API_KEY" -H "Content-Type: application/json" \
  -d "$payload" >/dev/null
{
  "hooks": {
    "PostToolUse": [
      {
        "matcher": "*",
        "hooks": [
          {
            "type": "command",
            "command": "bash ~/.claude/hooks/parse-ledger.sh"
          }
        ]
      }
    ]
  }
}

Then GET /v1/ledger/events with the same Bearer key. If the declared tool name is there, the hook works. Replay remains hypothetical.

POST an event

Send JSON to POST /v1/ledger/event with a Bearer key. Required: agent_id, session_id. kind is one of tool_call, file_read, file_write, file_delete, net_egress, session_start, session_stop. A body that names tool or path_glob and omits kind defaults to tool_call.