PushWarden docs

Configuration

Settings are stored in config.json in the data directory. Read and change them with pushwarden config.

pushwarden config                                    # print the current configuration
pushwarden config --set key=value [--set key=value]  # change settings

Booleans take true or false. Lists are comma-separated. A setting missing from the file has its default value.

The guard reads the file when it starts. Restart it after a change, for example systemctl --user restart pushwarden-guard.service on Linux.

pushwarden config --set action=ask
pushwarden config --set scan_roots=~/code,~/work
pushwarden config --set webhook_url=https://hooks.slack.com/services/...
pushwarden config --set auto_update=false

Settings

What is scanned

Key Default Meaning
scan_roots [] directories the guard watches and scan --home covers. Empty means auto-discover
exclude [] directories never scanned
js_all true scan every script file, not only known config names
deep false also scan node_modules and vendor

Schedule

Key Default Meaning
realtime true real-time file watcher on
quick_interval 5 seconds between process and network checks
full_interval 21600 seconds between full sweeps

Response

Key Default Meaning
action quarantine what the guard does with a CRITICAL file: quarantine, ask, delete or report
auto_kill true kill processes that match a kill-list indicator
auto_clean true with action=ask, quarantine when nobody answers the dialog
prompt true show native dialogs
prompt_timeout 180 seconds a dialog waits before the default applies

action values:

Value Behaviour
quarantine move the file to quarantine first (reversible), then show a dialog: remove for good, or restore and allow
ask show the dialog first; on timeout quarantine if auto_clean is on
delete remove without asking. Stripped files keep a backup in quarantine; deleted files do not
report alert only, never touch files. Processes are still killed if auto_kill is on

Notifications

Key Default Meaning
notify_desktop true desktop notifications
notify_min_severity HIGH lowest severity that notifies
notify_sweeps true notification when a background full sweep starts and finishes
webhook_url "" receives a JSON POST per alert
webhook_min_severity HIGH lowest severity that posts

Network block

Key Default Meaning
block_c2 true keep the system-wide C2 block installed; the guard reminds you daily while it is missing

Indicators and updates

Key Default Meaning
ioc_update true download indicators
ioc_update_interval 86400 seconds between indicator downloads
ioc_update_url "" alternative indicator URL, for mirrors and forks
auto_update true update the program automatically
update_channel stable stable or beta
update_interval 21600 seconds between update checks
update_api_url "" alternative release API, for mirrors

Records and disk limits

Key Default Meaning
report_keep 60 number of reports kept
journal true record every finding, action, decision, sweep and error in journal.jsonl
journal_min_severity WARNING lowest finding severity recorded in the journal
journal_keep_mb 100 journal archives kept, in total. 0 = no limit
journal_keep_days 365 oldest journal archive kept. 0 = no limit
quarantine_keep_days 90 quarantined originals are deleted after this many days. 0 = keep until removed by hand
quarantine_keep_mb 500 size of the quarantine folder. 0 = no limit
clone_keep_days 3 how long github-clean keeps a repository copy waiting for --apply
clone_keep_mb 2048 those copies in total; a larger repository is not kept

Team reporting (all opt-in)

Key Default Meaning
feedback_url "" the guard posts a daily digest of counts here
feedback_identify false include the host name in the digest
upload_url "" the guard uploads redacted journal events to this table endpoint
upload_key "" the insert-only API key sent with each upload

Files and directories

The data directory is ~/.pushwarden. Override it with PUSHWARDEN_HOME. A machine that only has ~/.threatscan, from when the program was called ThreatScan, keeps using that folder; see Moving from ThreatScan.

Path Content
config.json settings
iocs.json downloaded indicators; the program carries an embedded copy as fallback
journal.jsonl, journal-DATE.jsonl.gz the activity record and its rotated archives
journal-DATE.pruned a tiny marker for a deleted archive, holding its event count
guard.log, guard-DATE.log.gz the guard’s text log and its archives
alerts.log, alerts-DATE.log.gz one JSON line per alert, and its archives
reports/ timestamped JSON reports plus latest.json
quarantine/ copies of every stripped or deleted file, and index.jsonl, the protection history
decisions.json files you chose to allow, with their content hash
guard/ heartbeat and state of the running guard
machine-id a random identifier used only in the optional digest and central upload
upload-state.json central upload: how many events are uploaded, last attempt, last success, last error
github-clean-state.json what github-clean already verified, per repository and branch. No token
github-clean-clones/ repository copies kept so --apply does not download them again

Outside the data directory:

Path Content
per-user install directory, on Linux ~/.local/share/pushwarden with a link in ~/.local/bin the program. Override with PUSHWARDEN_INSTALL_DIR
PushWarden Notifier.app in the install directory macOS only: the helper that posts notifications
/etc/pushwarden, /Library/Application Support/PushWarden or %ProgramData%\PushWarden root-owned state and indicators of the C2 block
/usr/local/lib/pushwarden, /usr/local/libexec/pushwarden or %ProgramFiles%\PushWarden root-owned copy of the program for the C2 block
settings.json.pushwarden-<timestamp>.bak beside each editor’s settings backup made by hardening

Environment variables

Variable Read by Effect
PUSHWARDEN_HOME every command data directory instead of ~/.pushwarden
PUSHWARDEN_INSTALL_DIR install, update where the program is installed
GITHUB_TOKEN, GH_TOKEN github-clean token when --token is not given
NO_COLOR every command disable coloured output
PAGER, PUSHWARDEN_NO_PAGER help pager for long pages; set the second to disable paging
PUSHWARDEN_NO_BLOCK install, protect, uninstall never ask for administrator rights
PUSHWARDEN_ROOTS install script space-separated project directories to watch
PUSHWARDEN_WEBHOOK install script webhook URL
PUSHWARDEN_FEEDBACK_URL install script opt in to the daily digest
PUSHWARDEN_UPLOAD_URL, PUSHWARDEN_UPLOAD_KEY install script opt in to the central event upload
PUSHWARDEN_VERSION install script install this release instead of the latest
PUSHWARDEN_NO_INSTALL install script download the program only, do not register the guard
PUSHWARDEN_BASE_URL install script download from a mirror