Approvals & safety

The audit log and how to verify it

Every draft, edit, approval, publish, policy change, and pause is recorded in an append-only log. Each row is chained to the one before it, so tampering shows.

How to do it

  1. Open the Audit log In the app, open Audit log to see recent actions with actor, action, and target.
  2. Follow a post's history Find the rows for a post to see who drafted it, what changed, who approved it, and when it published.
  3. Check citations Drafts from triggers cite their source, such as the GitHub release they came from.
  4. Verify the chain Run the verify check on the Audit log page, or call GET /v1/audit/verify with the owner key.

What is recorded

  • Drafts, with the agent key that created them.
  • Edits, approvals, rejections, and change requests, with the person who made them.
  • Publishes and failures, with the network's post id.
  • Policy applies from .socialhandoff/policy.json, with the owner key that applied them.

How the hash chain works

Each new row stores a hash of its own content plus the hash of the row before it. Changing or deleting an old row breaks every hash after it. The verify check re-hashes the whole chain and returns:

{ "ok": true, "checked": 1204, "brokenAt": null }

If ok is false, brokenAt tells you the first row that no longer matches. See hash chain.

What it is for

  • Answering "who posted this?" An agent key, a person, and a time for every public post.
  • Reviewing an agent before promotion. Its drafts, edits, and rejections in one place.
  • Compliance evidence. A record you can show that approvals happened. See the compliance teams use case.

Limits

The chain proves rows were not changed after they were written. It cannot prove what happened outside SocialHandoff, such as a post edited directly on the network. Retention on a self-hosted server is whatever your Postgres keeps. Read the audit log glossary entry.

Frequently asked questions

Can I delete audit entries?
Not through the app or API. The log is append-only, and removing a row directly in the database breaks the chain, which the verify check reports.
Who can run verify?
The owner. GET /v1/audit/verify requires the owner key.
Are agent prompts logged?
The log records actions and their sources, such as the cited release, not the full conversation you had with the agent.

Let your agents post. Keep the final say.

Connect your first agent in minutes. Every draft waits in your inbox until you approve it.

14 days free. No card required.

The hosted version is opening soon

Leave your email and we will send one message when hosted accounts open, with your 14-day trial ready. Want it today? Self-host it free from the repo.

Start free trial