AISOURCEOFTRUTH.COM
MONITOR · RUN YOUR OWN CHECK · NO ACCOUNT NEEDED

Watch this log yourself

A log is only as honest as the people who check it. Anyone can run a monitor against AI Source of Truth with no account and no token. A monitor keeps the last checkpoint it saw, fetches the new one, and proves the new tree extends the old one. If the log rewrote history, showed two trees to two people, or a publisher's key changed without notice, a monitor catches it.

5
CHECKS PER RUN
0
INDEPENDENT MONITORS LISTED
14
ACTION INPUTS

What a monitor checks

CHECK 1

Log signature

The latest checkpoint (/log/checkpoint) is signed by a log key in the published policy (/log/policy). Pin the key with vkey: so a policy that swaps it is an alert too.

CHECK 2

Witness quorum

The policy's quorum of independent witnesses cosigned the checkpoint. A new checkpoint without them is a note; it becomes an alert when no checkpoint has met the quorum for 2 days.

CHECK 3

Consistency over time

The new checkpoint extends the one the last run stored. The monitor builds the RFC 6962 consistency proof itself from the tiles, so it trusts no proof the registry computed. A smaller tree, two roots at one size, or a failed proof fails the run with both checkpoints as evidence.

CHECK 4

Publisher events

For each publisher you name, every new key.rotated, key.recovered, key.revoked, key.delay_set, domain.set, identity.verified event on /v1/events is an alert, with the key that authorized it.

CHECK 5

The registry witness

Every cosignature the registry's witness issues is logged at /witness/cosignatures. Each new row is checked (leaf hash, entry, the witness signature), and two rows for one log and size with different roots are an alert.

An alert fails the job and opens one issue labeled aisot-monitor, or comments on the open one. A check that could not run fails the job too. The job summary holds the full result.

RUN IT AS A GITHUB ACTION

aisourceoftruth/monitor@v1

The action holds no secret of ours and reads public URLs only. uses: aisourceoftruth/monitor@v1, source packages/monitor (monitor.mjs, no dependencies; action.yml). Node 24 on the runner (actions/setup-node); the ML-DSA-44 log signature is checked where the policy lists that key.

name: aisot log monitor
on:
  schedule:
    - cron: "17 * * * *" # every hour
  workflow_dispatch:

permissions:
  contents: read
  issues: write # for the alert issue

concurrency:
  group: aisot-monitor # never run two monitors on one state at once

jobs:
  monitor:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-node@v4
        with:
          node-version: 24
      - uses: aisourceoftruth/monitor@v1
        with:
          publishers: acme, my-publisher # optional: whose key events to watch

Not published yet: the operator mirrors packages/monitor to the standalone aisourceoftruth/monitor repo, which does not exist yet, so uses: aisourceoftruth/monitor@v1 does not resolve today. Until then the log's own hourly run below is the only monitor, and anyone can check the same things by hand from the tiles and the policy on this page.

also runs asnode monitor.mjs --origin https://aisourceoftruth.com --publishers acme --state state.json --json
exit codes0 when every check passed, 1 on an alert, 2 when a check could not run
INPUTS
INPUTDEFAULTMEANING
originhttps://aisourceoftruth.comRegistry to watch.
policy<origin>/log/policyPolicy (C2SP tlog-policy) URL or file path.
vkeynonePin the log's Ed25519 vkey; a policy that drops it is an alert.
publishersnonePublisher ids whose key, domain and identity events to watch.
state-modecacheWhere the state lives between runs: cache (the Actions cache) or file (a file in your repo).
state-path.aisot-monitor/state.jsonPath of the state file.
cache-keyaisot-monitorCache key prefix; one per monitored origin.
commit-statefalseWith state-mode file: commit and push the state after each run (needs contents: write).
file-issuetrueOpen or comment on one issue labeled aisot-monitor when a check fails (needs issues: write).
same-operatorfalseOnly for the registry's own operator: marks the run as not independent.
assessnoneA list file of registry dependencies (by convention aisot.depends). When set, the run is the dependency gate instead of the log checks.
fail-ondo_not_relyWith assess: the verdict that fails the run, do_not_rely or check.
assess-outputaisot-assess.jsonWith assess: the JSON file of every assess receipt.
github-tokenthe job tokenToken for the issue.
TLOG-TILES URLS

Read the log as tiles

hash tilehttps://aisourceoftruth.com/log/tile/<L>/<N>
partial tilehttps://aisourceoftruth.com/log/tile/<L>/<N>.p/<W>
entry bundlehttps://aisourceoftruth.com/log/tile/entries/<N>
cachingFull tiles never change: Cache-Control: public, max-age=31536000, immutable.
fallbackWhere tiles are not served, the monitor checks GET /v1/proofs/consistency instead.
THE TRUST POLICY

What a verifier requires

# C2SP tlog-policy (https://c2sp.org/tlog-policy) for the AI Source of Truth log.
# A checkpoint is valid when the log key below signed it and the quorum co-signed it.
# Only independent witnesses are listed. A witness run by the registry's operator never counts.
log aisourceoftruth.com/log+3b162de5+ASW799lCqbFOP7rojZjZlbDqBarpu1gimAMGcPaf2t8r https://aisourceoftruth.com
# No independent witness co-signs this log yet. The target quorum is 2.
quorum none

Live from /log/policy. A same-owner witness is never listed in it.

KNOWN MONITORS
MONITOROPERATORCHECKSCADENCECOUNTS
.github/workflows/log-monitor.yml (the registry repo)PromptReports LLC (same operator)log signature, quorum, consistency, the witness cosignature loghourlySAME OPERATOR · NOT COUNTED

Run one and tell us, and we will list it here. We list monitors; we do not vouch for them. A monitor the registry's operator runs is marked and never counts as independent.

$ curl -H 'Accept: application/json' https://aisourceoftruth.com/monitor # this page is a rendering of the API. Reproduce it as data.