Synopsis
Subcommands
List audit entries (default)
Maximum number of entries to display (1-200).
Filter by service name (e.g., “openai”, “anthropic”).
Filter by policy decision (e.g., “allow”, “deny”, “log”).
Filter entries from this Unix timestamp (milliseconds).
Filter entries to this Unix timestamp (milliseconds).
Export audit entries
Path to write CSV file. If not specified, outputs to stdout.
Filter by service name.
Filter by policy decision.
Filter entries from this Unix timestamp (milliseconds).
Filter entries to this Unix timestamp (milliseconds).
Examples
List recent audit entries
List with custom limit
Filter by service
Filter by decision
Filter by time range
Export to CSV
Export to stdout and pipe
Export with filters
Export time range
Output format
Table columns (list mode)
- TIME - Timestamp in MM-DD HH:MM format (UTC)
- SERVICE - API service name (truncated to 12 chars)
- DECISION - Policy decision (allow, deny, log)
- COST_USD - Request cost in USD (6 decimal places) or ”-” if not applicable
- REASON - Short reason for decision (truncated to 10 chars)
- ACTION - HTTP method and path
CSV columns (export mode)
- id - Unique audit entry ID
- timestamp - Unix timestamp in milliseconds
- intent_type - Type of request (llm, etc.)
- service - API service name
- action - HTTP method and path
- decision - Policy decision
- reason - Reason for decision (if any)
- cost_usd - Request cost (8 decimal places)
- policy_version_hash - SHA256 hash of policy version
- intent_hash - SHA256 hash of request intent
- permit_hash - SHA256 hash of permit (if applicable)
- merkle_root - Merkle root for cryptographic verification
Behavior
- Queries the SQLite audit database
- Results are paginated (limit parameter)
- Filters are combined with AND logic
- CSV output uses proper escaping for special characters
- Formula injection protection (prefixes
=,+,-,@with')
Error messages
No entries found:Exit codes
- 0 - Audit logs retrieved successfully (or empty)
- 1 - Error occurred (database error, file write failed, etc.)
Common decisions
- allow - Request was permitted by policy
- deny - Request was blocked by policy
- log - Request was logged for monitoring
Common deny reasons
- rate_limit_exceeded - Too many requests per minute
- budget_exceeded - Daily spending budget reached
- prompt_drift_detected - Prompt baseline drift threshold exceeded
- credential_not_found - No valid credential for service
- policy_violation - Request violated security policy
Data retention
Audit logs are retained according to thealerts.retention_days setting in fishnet.toml (default: 90 days). Older entries are automatically cleaned up on server startup.
Related commands
- fishnet status - View summary of today’s activity
- fishnet policy - Edit security policies
- fishnet backup - Backup audit database