Documentation Index
Fetch the complete documentation index at: https://docs.abloatai.com/llms.txt
Use this file to discover all available pages before exploring further.
Every commit becomes one row. Rows are hash-chained per principal —
tamper-evident, queryable, exportable.
Row shape
{
occurredAt: '2026-05-14T14:22:01.034Z',
actorKind: 'user' | 'agent' | 'system',
actorId: string,
onBehalfOfKind: 'user' | 'agent' | 'system' | null,
onBehalfOfId: string | null,
capabilityId: string | null,
capabilityLabel: string | null,
delegationChainRoot: string | null, // always points at a human
causedByTaskId: string | null,
actionType: string, // e.g. 'task.update'
modelName: string | null, // e.g. 'claude-opus-4-7'
diffSummary: unknown,
// tamper-evident
chainSeq: number,
prevHash: string,
rowHash: string,
}
Delegation chain
delegationChainRoot always points at the human who started the chain.
There is no audit row whose root is an agent. Autonomous AI writes are not
a thing in this system; every chain starts with a person.
Verify
curl https://<your-app>/api/orgs/<slug>/audit/verify-chain?\
principalKind=agent\
&principalId=task-writer-v3
Returns either:
{ "ok": true, "rowsChecked": 10472, "fromSeq": 1, "lastSeq": 10472 }
or, on tamper:
{ "ok": false, "brokenAtSeq": 8419, "reason": "hash_mismatch",
"expectedHash": "sha256:…", "foundHash": "sha256:…" }
Filter and paginate
The dashboard at /[orgSlug]/audit is the UI for this. The same filters
are available on the API:
GET /api/orgs/<slug>/audit?actorKind=agent&since=2026-05-01&limit=100
Cursor-paginated. Continue with the nextCursor value from the response.
Export
curl 'https://<your-app>/api/orgs/<slug>/audit/export?actorKind=agent&since=2026-05-01' \
> may-agent-writes.csv
CSV up to a hard cap per request. For larger windows, paginate.
Compliance posture
The audit log landing page is the marketing-side description.
The verifier’s hash algorithm and chain semantics live in the
@ablo/audit-chain package — embeddable if you need to verify chains in a
detached service.