Skip to main content
Every tool call Cynative makes is recorded to a persistent JSONL audit log at ~/.cynative/audit.log. The log is on by default and fail-closed: if a call cannot be recorded, the run aborts rather than proceeding without a trail. This gives you a complete, tamper-evident record of every action the model took — what it called, with what arguments, what decision was made, and which agent prompted it.

What gets logged

Every tool call produces one or more JSONL records. Each record captures: Every record from an agent run also includes the agent’s name, source, and SHA-256 file digest — so any finding can be traced back to the exact prompt revision that produced it.

Redaction

Tool results are redacted before they are written to the log. Cynative’s redactor scans the result string for secret-shaped values (API keys, tokens, credentials) and replaces them before the record is persisted. Approval-prompt arguments are stored verbatim — they match exactly what you saw and approved at the prompt. Arguments for calls that were never shown at an approval prompt (inner code_execution calls, ungated orchestration tools, and unknown tools) are also redacted before logging, so a resolved secret that a script or the model copied from earlier output is never persisted.
The log can hold sensitive values from approval-prompt arguments — for example, a URL containing a signed token or a parameter derived from secret output. The log file is created with mode 0600 and is readable only by the user who ran Cynative. Treat it with the same care as other credential material on the host.

Fail-closed behavior

The audit log is fail-closed by design. If any of the following occur, the run aborts immediately rather than continuing without a complete record:
  • A record cannot be marshaled to JSON.
  • A record cannot be written to the log file (e.g. disk full, permissions error).
  • The log file cannot be opened at startup.
This means you can rely on the absence of a record to mean a call did not happen — the log is not best-effort. The only exception is retention pruning and compression, which run asynchronously and do not affect the fail-closed write path.

Configuration

Configure the audit log under audit: in ~/.cynative/config.yaml, or via environment variable. Environment variables override the config file. Example ~/.cynative/config.yaml snippet:
Rotation and retention are handled by a size-rotating, age-retaining writer. When the active log file reaches max_size_mb, it is renamed and a new file is opened. Files older than retention_days are pruned on the next rotation. If compress is true, rotated files are gzip-compressed asynchronously.