What is logged
Every tool call — regardless of which tool — produces one JSON line in the audit log:timestamp— ISO 8601 timestamp of the calltool— name of the tool that was invokedinput— sanitized arguments passed to the toolsuccess—trueif the tool returned successfully,falseon error or block
What is not logged
Sensitive keys are stripped frominput before anything is written to disk. Any argument whose key name contains one of the following substrings (case-insensitive) is removed:
tokenpasswordsecretkey
GITHUB_TOKEN, MCP_SECRET, API keys, and similar values never appear in the log file — even if they were passed as tool arguments.
The result value from the tool is not logged — only the
success boolean. Raw tool output (stdout, API responses, file contents) does not appear in the audit log.Configuration
Enable or disable
AUDIT_ENABLED=false (the exact string "false") to disable it.
Log file location
./reacher-audit.log relative to the project root. The file is created automatically if it does not exist. Entries are appended — the file is never truncated by Reacher.
In production, use an absolute path and set up external log rotation:
reacher.config.yaml
Reading the log
The log is newline-delimited JSON (NDJSON). Each line is a valid JSON object. Follow in real time:jq:
How it works
TheauditLog function in src/lib/audit.js is called after every tool execution in src/mcp-server.js. It:
- Checks
config.audit.enabled— iffalse, returns immediately - Copies the input arguments and deletes any key whose name contains a sensitive substring
- Builds a log entry with
timestamp,tool,input, andsuccess - Appends the JSON-serialized entry plus a newline to the log file using
fs.appendFile