Configuration
Settings come from a TOML file. red-clippy serve reads ./red-clippy.toml
if it exists, and otherwise runs entirely on built-in defaults. Copy the
example and edit:
cp red-clippy.toml.example red-clippy.toml
bind = "127.0.0.1:7337"
database_url = "sqlite://red-clippy.db?mode=rwc"
storage_root = "./red-clippy-storage" # uploaded evidence lives here
max_upload_bytes = 26_214_400 # 25 MiB
Settings
| Setting | Default | Meaning |
|---|---|---|
bind | 127.0.0.1:7337 | Address and port for the HTTP server. |
database_url | sqlite://red-clippy.db?mode=rwc | SQLx URL. SQLite is the supported backend. |
storage_root | ./red-clippy-storage | Directory for evidence and per-pentest files. Created at startup if missing. |
max_upload_bytes | 26214400 | Cap on a single upload, in bytes. |
frontend_dist | unset | Override for the built SPA. File-only. |
local_open | false | Allow the Files page to open folders on the server host. File-only. |
Relative paths are resolved against the working directory the server was
started in. Always cd into the folder holding the binary before launching it.
Precedence
Per field: CLI flag > environment variable > TOML > built-in default.
| Setting | CLI flag | Environment variable |
|---|---|---|
bind | --bind, -b | RED_CLIPPY_BIND |
database_url | --database-url | RED_CLIPPY_DATABASE_URL |
storage_root | --storage-root | RED_CLIPPY_STORAGE_ROOT |
max_upload_bytes | --max-upload-bytes | RED_CLIPPY_MAX_UPLOAD_BYTES |
| config file path | -c, --config | RED_CLIPPY_CONFIG |
The database and storage flags are global, so red-clippy init-db and the
other CLI helpers honour them too.
An unrecognised key in the TOML file stops startup with an error instead of
being ignored, so a typo like bnid fails loudly rather than leaving the
server quietly on a default.
File-only settings
frontend_dist points at a directory holding a built SPA. Release binaries
embed frontend/dist at compile time, so this is normally unset and there is
no sidecar directory to ship. Set it to serve a patched bundle without a Rust
toolchain; the server then reads <frontend_dist>/index.html and
<frontend_dist>/assets/.
local_open lets the Files page’s “reveal in file manager” button shell out
to xdg-open, open or explorer.exe on the machine running the server.
It ships off. Turn it on only when the server is your own desktop in a
logged-in graphical session. Under systemd, or when you are reaching the panel
across a network, there is no session for it to open into.
Logging
Log filtering uses RUST_LOG, defaulting to info,sqlx=warn. Logs go to
stderr.
RUST_LOG=debug ./red-clippy serve # verbose
RUST_LOG=warn ./red-clippy serve # quiet
RUST_LOG=info,sqlx=info ./red-clippy serve # include SQL
Network exposure
Red Clippy binds to 127.0.0.1 and is meant to run on your own machine, next
to the agent driving it. It is not built to be exposed to a network or the
internet: there is no TLS, no rate limiting on the login form, and API keys
grant full access to everything in their organization.
If you do change bind, put it behind TLS and treat the API keys like the
passwords they are.