EveryDocumentation Index
Fetch the complete documentation index at: https://nono.sh/docs/llms.txt
Use this file to discover all available pages before exploring further.
nono run session is recorded by default. nono records the command that ran, the audit events observed during the session, optional filesystem changes, and network events outside the sandbox in the trusted parent process. This gives you a history of agent activity for debugging, compliance, and forensics.
The details of how that record is protected are explained in the Security Model: the trusted supervisor records the session, the event log is committed with a Merkleized integrity structure, and optional signing lets a key holder attest to the completed session.
How It Works
By default,
nono records a session audit and protects the audit event log with an integrity layer. Filesystem hashing and rollback storage are optional extra layers.| Field | Meaning |
|---|---|
| Command | The command and arguments, with best-effort redaction for common secret-bearing argv, header, and URL patterns |
| Timestamps | Start time, end time, duration |
| Exit code | How the process terminated |
| Audit events | Session start/end plus supervisor-observed events such as capability decisions and URL opens |
| Network events | Proxy audit log (when network proxy is active) |
| Tracked paths | Writable policy roots for the session |
| Merkle roots | Filesystem-state commitments (when --audit-integrity or --rollback is active) |
| Snapshots | Content-addressable rollback metadata (when --rollback is active) |
| Audit integrity summary | Hash-chain head and Merkle root for the audit event stream unless disabled with --no-audit-integrity |
Modes
- Default
- No Audit
- No Audit Integrity
- Filesystem Integrity
- Rollback
Records the session and protects the recorded event log with the default integrity layer.
Terms
Every audited session writes an append-onlyaudit-events.ndjson file. In plain terms:
| Term | Meaning |
|---|---|
| Session | One audited nono run |
| Audit event | One recorded fact within that session, such as session_started, session_ended, a capability decision, or a supervisor-observed URL-open event |
| Filesystem-state hashing | Walking the tracked writable paths and hashing the files under them to commit their state before and after the run |
Integrity Flow
Record events
The trusted supervisor records audit events during the session into
audit-events.ndjson.Commit the event stream
When audit-log integrity is enabled, nono stores an event count, a hash-chain head over the ordered event stream, and a Merkle root over all recorded event leaves.
Optionally hash filesystem state
With
--audit-integrity, nono also walks the tracked writable roots and records pre/post filesystem Merkle roots.Audit Signing
Signing is a separate layer from audit recording, audit-log integrity, filesystem integrity, and rollback. It answers a different question:- audit recording: “what happened?”
- audit-log integrity: “has the recorded audit log changed?”
- filesystem integrity: “what filesystem state was committed?”
- signing: “did a holder of this signing key attest to this completed session?”
--audit-sign-key, the supervisor signs once per session, after the run has finished.
--audit-sign-key does not sign every event individually. It signs once, at session finalization, over the completed session audit root and session context.
To have the supervisor sign the completed session audit record, use
--audit-sign-key:
audit-attestation.bundle, and a summary is stored in session.json.
Command arguments included in session metadata and audit attestations are best-effort redacted before they are written. This protects common forms such as
--token VALUE, --api-key=VALUE, Authorization: ..., URL userinfo, and sensitive query parameters, but it is not a complete secret detector. Prefer nono’s credential injection features instead of passing secrets on the command line.Redaction Policy
The default redaction policy covers common secret-bearing command flags, HTTP headers, URL userinfo, and URL query keys. You can extend it for local tools in~/.config/nono/config.toml:
Commands
nono audit list
List all recorded sessions, grouped by project directory.
nono audit show
Show complete details for a specific session.
--audit-sign-key, nono audit show also includes:
- the attestation predicate type
- the signer key id
- the attested public key
- the attestation bundle filename
nono audit verify
Verify the recorded audit log, its inclusion in the local audit ledger, and any optional audit attestation.
- the keyed DSSE signature
- the attested Merkle root against the session’s stored audit integrity summary
- the session id bound into the attestation predicate
- the provided public key, if
--public-key-fileis supplied
Use Cases
Debugging
When an agent produces unexpected results, the audit trail tells you what the supervisor observed during the run and, when rollback was enabled, exactly what files changed:Compliance
For teams that need to demonstrate control over AI agent activity, the audit trail provides:- Timestamped proof that sandboxing was active
- Structured record of what the supervisor observed
- Tamper-evident integrity metadata for the audit log itself by default
- Optional filesystem-state commitments over tracked writable roots (
--audit-integrity) - Optional complete record of filesystem changes with restore capability (
--rollback) - Machine-readable JSON export for automated compliance reporting
Forensics
If something goes wrong, the audit trail helps reconstruct what happened:Relationship to Rollbacks
Audit, audit integrity, and rollback are separate layers that share the same session ID:| Aspect | Audit | Audit Integrity | Rollback |
|---|---|---|---|
| Default | Always on | Event-log integrity on by default; filesystem hashing opt-in via --audit-integrity | Opt-in (--rollback) |
| Opt-out | --no-audit | --no-audit-integrity disables event-log integrity | --no-rollback |
| Purpose | Record what happened | Detect tampering in the recorded audit log and optionally commit filesystem state | Restore filesystem state |
| Data | Command, timestamps, exit code, audit events, network events, tracked paths, optional audit attestation | Event count, chain head, Merkle root, optional filesystem Merkle roots | Full file content snapshots + Merkle roots |
| Commands | nono audit list/show/verify/cleanup | nono audit show/verify | nono rollback list/show/restore/verify/cleanup |
nono audit show also includes tracked paths and filesystem Merkle roots.
Limits
The audit trail is intentionally narrow in what it claims to prove.- The event log is recorded by the trusted supervisor, not by the sandboxed child.
- The default integrity structure protects the audit event stream for a single session and also records that session into the global audit ledger.
--audit-sign-keyadds a keyed supervisor-side signature over the session audit Merkle root and session context, but that still depends on trusting the configured signing key and how its public key is distributed.- Without an external timestamp, transparency log, or other anchor, this remains host-local attestation material rather than a globally witnessed timestamped proof.
- For supervised runs, the supervisor hashes the main executable binary selected for launch and records its canonical path and SHA-256 digest.
- That executable hash is still subject to a small hash-to-exec race window. nono hashes the file before
exec, but does not yetfexecvefrom the same already-open file descriptor. - Only the main executable (
argv[0]after resolution) is hashed. Forbash script.sh, this commits/bin/bash, notscript.sh, shared libraries, interpreters in a launch chain, or dynamically loaded plugins/modules. - Direct and monitor-style execution paths do not currently populate executable identity; this metadata is recorded by the supervised path.
--audit-integrityrecords filesystem-state Merkle roots over tracked writable paths, but it does not capture rollback objects or restore data. Use--rollbackfor that.- Filesystem-state hashing does not attest the full runtime closure of a process. Shared libraries, interpreters, dynamically loaded plugins, and other runtime dependencies are not committed unless separately recorded.
network_eventsand rollback metadata are separate recorded structures. They are not a claim of full system provenance or full host compromise detection.--audit-sign-keysigns the main session audit Merkle root, not every possible host-side artifact. It does not sign shared libraries, runtime module loads, or an external timestamp by itself.
Storage
Audit sessions are stored in~/.nono/audit/. Audit-only sessions are small (session.json and audit-events.ndjson). Signed sessions also include audit-attestation.bundle. Clean them up with nono audit cleanup.