Naysay



Developer Preview 0.1.0 · Customer-operated · Staging use

Verify what your agent did.

Record tool requests and responses, retain the evidence, and verify it after the service has stopped.

Download the developer preview   /   Read the setup guide

No wallet, model API key or client SDK is required for this local preview. Docker runs the services on your own machine.


Run the example

Experimental source release. Software tests and the 26 fault scenarios passed; the container image build and Docker startup remain unverified.

Start Docker, extract the download, then run these commands in the extracted folder:

docker compose up --build -d --wait gateway outcomes
docker compose run --rm --no-deps client
docker compose cp gateway:/exports ./evidence

The example sends a synthetic tool request over HTTP, retries it, and exports a signed event record. It also performs isolated Git and SQLite updates. Nothing is written to your existing repositories or databases.

Read the result

Two separate questions about the same action
ObservationDid this action execute?Does its intended value still hold?
Before executionUnresolvedDiffers
After executionAppliedHolds
After a later overwriteAppliedDiffers

An unresolved result means the evidence does not establish an execution outcome. It is not an accusation or a security verdict.

Verify without the service

Stop the services. Replace run-EXAMPLE below with the evidence folder created by your run:

docker compose stop gateway outcomes
docker run --rm --network none \
  --mount type=bind,source="$PWD/evidence",target=/evidence,readonly \
  naysay-preview:0.1.0 python -m developer_preview.verify /evidence/run-EXAMPLE

The verifier checks the signatures against retained public keys, the original action intents, fresh observation nonces and the gateway's separately retained closing receipt.

Connect your staging agent

Configure your fixed HTTPS tool endpoints in tools.json. Your controller creates a run and gives the agent a credential scoped to that run. Update the agent's tool handler to send its JSON request to POST /v1/runs/RUN_ID/calls. The gateway forwards the request to your configured tool and records the response.

Configuration and complete HTTP walkthrough. This customer-operated gateway uses its own controller and run credentials. Hosted Naysay API keys belong to the separate evaluation service.

Reproduce the research

docker run --rm --network none naysay-preview:0.1.0 python research/outcome_study/replay.py

The archive contains 26 authored Git/SQLite fault scenarios. Replay checks the published observations and source hashes: 18 correct execution decisions, 8 unresolved, 0 incorrect. The setup guide also explains how to run fresh faults, including response loss and restart. The ordinary retained-log baseline reaches the same verdicts.

Paper and complete reproduction archive on Zenodo   /   Release checksum

Before connecting real data

Use approved staging data and keep the services on a trusted local network. The default configuration binds to loopback. The customer recorder, signing keys and backend records remain trusted; calls that bypass the gateway are not covered. An HTTP response alone does not prove a downstream mutation.

This release does not include managed identity, key rotation, distributed operation or production hardening. The Git and SQLite adapters operate isolated example stores. Operator staking, penalties and shared governance remain proposed research mechanisms.