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
| Observation | Did this action execute? | Does its intended value still hold? |
|---|---|---|
| Before execution | Unresolved | Differs |
| After execution | Applied | Holds |
| After a later overwrite | Applied | Differs |
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.