# Receipts

[Docs](https://www.rightnowai.co/docs) / [RightNow Agent](https://www.rightnowai.co/docs/agent) / [Receipts](https://www.rightnowai.co/docs/receipts)

Updated 2026-10-11

> **Release status**
>
> RightNow Agent, the terminal coding agent, is paused. Its guides stay online as reference.

A receipt records the verified result of a bounded RightNow Agent transaction, checked against a tool result or the filesystem, never against assistant narration. A failed postcondition writes a failure record instead. Records come from one-call transactions (`[rightnow] one_call_transactions`, shipped on) and, with `act_first` (shipped off), from project builds.

## Storage

**Text**

```text
<RIGHTNOW_HOME>/receipts/<workspace-key>/<UUID>.receipt.json
<RIGHTNOW_HOME>/receipts/<workspace-key>/<UUID>.failure.json
```

Pretty-printed JSON, written atomically; on macOS and Linux the directory is `0700` and each file `0600`.

## Record format

Hashes are lowercase hexadecimal with a `sha256:` prefix.

**Receipt fields**

| Field | Value |
| --- | --- |
| schema | rightnow.transaction.v1 |
| record\_type | receipt or failure |
| receipt\_id / failure\_id | Generated UUIDv7 |
| transaction\_id, session\_id | Copied from the runtime context |
| started\_at, completed\_at | UTC RFC 3339, millisecond precision |
| workspace\_root | Canonical workspace path, forward slashes |
| runtime | model, config\_sha256 (hash of the full effective sampling config), and config: api\_backend, base\_url, max\_completion\_tokens, temperature, top\_p, context\_window, reasoning\_effort, stream\_tool\_calls, plus header and query names without their values |
| summary | Receipt only: the verified-effect line |
| claim | Receipt only: one claim, below |
| attempted, expected, observed, reason | Failure record only: the failed postcondition |

## Claims

`claim.kind` selects the evidence fields:

**Claim kinds**

| kind | Fields |
| --- | --- |
| file\_mutation | path (workspace-relative), operation (created, replaced, wrote, patched), before (exists, bytes, sha256), after (bytes, sha256), change (replacement\_count or unified\_diff) |
| command, test | command, exit\_code, stdout and stderr (bytes, sha256 each) |

## Verify a file receipt

From the workspace root, with a saved `record.receipt.json`, on Windows, macOS, or Linux:

**Text**

```text
rightnow receipt verify ./record.receipt.json --workspace . --json
```

- `--workspace <DIR>` checks that root instead of the recorded `workspace_root`.
- `--json` prints `receipt_id`, `verified`, `path`, `expected`, `observed`, and `message` instead of a PASS or FAIL line.
- Only a file-mutation receipt verifies: its target must still match the recorded byte count and SHA-256. Command and test receipts are historical execution evidence with no current file state.

**Verification results**

| Result | Text output | Exit |
| --- | --- | --- |
| Match | PASS: \`&lt;path&gt;\` still matches receipt &lt;receipt-id&gt;. | 0 |
| Changed | FAIL: \`&lt;path&gt;\` drifted: expected &lt;bytes&gt; bytes / &lt;sha256&gt;, observed &lt;bytes&gt; bytes / &lt;sha256&gt;. | 1 |
| Missing | FAIL: \`&lt;path&gt;\` is missing; receipt &lt;receipt-id&gt; no longer verifies. | 1 |
| Cannot check | Error: &lt;reason&gt; | 1 |

Receipt loading, schema, workspace, and path errors return before any result is printed: an unreadable file, invalid JSON, a failure record, another schema, a command or test receipt, or a target outside the workspace. A failed check, in either output mode, ends with `Error: receipt verification failed` on stderr.

**rightnow · verify a receipt**

Windows

```text
# After a verified file creation
Created `<file>` (<bytes> bytes).
Receipt: <receipt-path>

PS> rightnow receipt verify "<receipt-path>"
PASS: `<file>` still matches receipt <receipt-id>.
```

## Previous

[Sandbox](https://www.rightnowai.co/docs/sandbox)

## Next

[Monitoring](https://www.rightnowai.co/docs/monitoring)
