Pavois, command reference

The 14 pavois commands and their 68 flags, generated from the binary itself: scan, harden, diff, verify, bundle, rules, norms, oscal.

This page is generated from the binary (`pavois clidocs`), so it cannot fall behind it. The command and flag texts are the ones your terminal prints.

Exit codes

The verdict your pipeline reads. CINC's own 100/101 are swallowed internally: a failing control is a normal outcome, not an error.

0compliant: the run succeeded and, if --fail-under was set, the grade met the threshold
1non-compliance: the grade is below --fail-under (the gate a CI job acts on)
2technical error: pavois or the engine could not complete the run

pavois bundle

Assemble a signed-ready evidence package (before/after, plan, reports, manifest + checksums)

pavois bundle <before.json> <after.json>

Flags

--exceptionsstringformal exceptions file (who excluded what, why, until when)
-o, --outstringoutput directory (default: evidence-bundle-<timestamp>)
--planstringhardening plan that was applied (.yml)
--reboot-proofstringreboot-proof artifact (boot_id / uptime captured post-reboot)
--reportstringArrayreport file to include (HTML/JSON/...), repeatable

pavois bundle verify

Verify an evidence bundle: every checksum, the manifest digest, and a signature if present

pavois bundle verify <bundle-dir>
--require-signatureboolfail if no valid signature is present

pavois diff

Compare two states (scan report or plan): fixed, regressed, (de)activated, grade delta

pavois diff <before.json|plan.yml> <after.json|plan.yml>

Flags

--htmlstringalso write a self-contained campaign report to this path
--jsonstringalso write the structured campaign delta to this path

pavois doctor

Check the environment is ready to scan (CINC engine, sudo, SSH, OS, rule corpus)

pavois doctor

pavois harden

Plan and apply hardening from the Pavois reference (Chef-native, no bash)

pavois harden

Drive hardening from a state-aware YAML plan. `pavois harden plan <target>` scans the machine, reads the Pavois reference, and writes a plan where already- compliant rules are shown (never re-applied) and only real gaps are opt-in.

pavois harden apply

Compile the enabled plan items into a native Chef run and converge the target

pavois harden apply <plan.yml>
--bootstrap-cincboollet Pavois install the engine ON the target when it is missing (an unpinned installer, run as root there)
--dry-runboolcompile and print the Chef recipe, do not converge
--i-understand-dangerboolacknowledge ALL `danger:` items at once (brick/lockout risk); otherwise set `acknowledged: true` per item in the plan
--i-understand-lockoutboolapply a remediation that closes the account you are connected with (you will need another way in)
--keystringSSH private key for the target
--no-restore-pointbooldo NOT photograph the prior state before converging (you lose `harden rollback`)
--rebootboolwhen changes need it, reboot the target via a Chef `reboot` resource at the end of the run
--restore-pointstringwhere to write the restore point (default: restore-points/<target>-<timestamp>)
--scanboolafter converging, re-scan and generate a fresh report + grade
--standardstringapply each rule's value for THIS standard (bp28|cis|nist|…); default = the most-secure value
--sudoboolaccepted for symmetry with scan and plan; apply always uses sudo, so this changes nothing
--sudo-promptboolprompt for the sudo password (no echo; also reads PAVOIS_SUDO_PASSWORD): for a least-privilege target account without NOPASSWD
--targetstringoverride the target from the plan
--yesboolskip the confirmation prompt (CI / --auto-approve)

pavois harden plan

Scan a target and write a state-aware hardening plan (YAML)

pavois harden plan <target>
--bootstrap-cincboollet Pavois install the engine ON the target when it is missing (an unpinned installer, run as root there)
--enablestringpre-enable gaps in the written plan: none | auto (every gap an apply can actually close) | all (also the dangerous ones, still unacknowledged)
--enginestringcinc engine: auto|native|docker
--fromstringuse an existing InSpec scan JSON instead of scanning
--keystringSSH private key for the target
--outstringplan output path (default: ./hardening-plan-<os>.yml)
--ssh-passstringSSH password (discouraged: leaks via ps/history; prefer --ssh-prompt or a key)
--ssh-promptboolprompt for the SSH password (no echo; also reads PAVOIS_SSH_PASSWORD)
--sudoboolrun checks with sudo (needed for effective config)
--sudo-promptboolprompt for the sudo password (no echo; also reads PAVOIS_SUDO_PASSWORD); implies --sudo

pavois harden rollback

Undo a hardening run: restore the files, packages and services a plan changed

pavois harden rollback <restore-point-dir>
--keystringSSH private key for the target
--sudo-promptboolprompt for the sudo password (no echo; also reads PAVOIS_SUDO_PASSWORD)
--targetstringrestore to this host instead of the one recorded in the manifest (e.g. a clone)
--yesbooldo not ask for confirmation

pavois norms

Output the norm catalogue (standards, versions, authorities) + live coverage as JSON

pavois norms

Emit the standards Pavois maps to: CIS (per-OS benchmark version), ANSSI-BP-028, NIST 800-53/800-171, PCI-DSS, STIG: each with its version, authority and source, plus live per-OS coverage from the rule base. The self-describing reference API.

Flags

--prettyboolpretty-print the JSON (default true)

pavois oscal

Publish the Pavois baseline as OSCAL (catalog + per-OS profiles)

pavois oscal

Emit the Pavois Effective-Configuration Hardening Baseline as an OSCAL 1.1.2 catalog (one control per neutral id, grouped by domain, carrying method=<evidence_type>, the real check, per-OS CIS/STIG numbers and norm links) plus per-OS profiles. With no --out the catalog prints to stdout; --out DIR writes the catalog + profiles/.

Flags

--outstringwrite catalog + profiles to this directory (default: stdout)

pavois profiles

List bundled profiles

pavois profiles

pavois render

Render a stored scan report (.json) to the self-contained HTML report, offline

pavois render <report.json>

Flags

--enginestringengine label for the report header (default CINC Auditor (InSpec))
--machinestringmachine label for the report header
-o, --outstringwrite HTML here (default: stdout)
--timestampstringtimestamp label for the report header
--transportstringtransport label for the report header (default ssh)

pavois rules

Output the Pavois rule base as JSON (the reference API)

pavois rules

Emit the Pavois rule base as JSON: id, title, domain, severity, the real norm mappings (cis/bp28/nist/pci-dss/stig) and per-norm thresholds, the check and the remediation. Filter with --os/--standard/--domain. This is the consumable contract of Pavois's source-of-truth reference; it does not need a target.

Flags

--domainstringonly rules in this domain
--idstringonly this control id (e.g. ssh-disable-root-login)
--osstringOS reference to read (e.g. debian12, ubuntu2404) (default debian12)
--prettyboolpretty-print the JSON (default true)
--standardstringonly rules mapped to this standard: bp28|cis|nist|pci-dss|stig

pavois scan

Audit a target (effective config) and grade A-E

pavois scan <local|user@host|container>

Flags

--allow-containerboolscan a container with a full per-OS profile anyway (kernel controls then measure the HOST, not the target)
--allow-unprivilegedboolscan without root anyway (checks that need privilege will report deviations they never measured)
--bootstrap-cincboollet Pavois install cinc-auditor ON the target when it is missing (an unpinned installer, run as root there)
--controlsstringArrayrun ONLY these control ids (fast single-rule iteration, e.g. --controls ssh-disable-root-login)
--enginestringauto | native | docker (default auto)
--fail-underintexit code 1 if grade < PCT/100 (default -1)
-f, --formatstringformat: table | json | sarif | junit | csv | html | oscal (default table)
--fromstringevaluate an existing InSpec JSON report (no scan)
--keystringSSH private key
--levelstringlevel (e.g. --standard cis --level 1)
--on-targetboolrun the scan ON the target (local://): far fewer SSH round-trips, much faster
--outstringJSON output dir (default: <root>/reports)
--profilestringoverride the auto-detected per-OS profile (path or URL to a custom profile)
--ssh-passstringSSH password (discouraged: leaks via ps/history; prefer --ssh-prompt or a key)
--ssh-promptboolprompt for the SSH password (no echo; also reads PAVOIS_SSH_PASSWORD)
--standardstringaudit a single standard: bp28|cis|pci-dss|nist|stig (see: Pavois standards)
--sudoboolrun as root via sudo (effective config of a service)
--sudo-promptboolprompt for the sudo password (no echo; also reads PAVOIS_SUDO_PASSWORD); implies --sudo

pavois serve

Serve HTML reports over HTTP

pavois serve

Flags

--portintHTTP listen port (default 8098)

pavois standards

Explain the auditable standards (--standard) and their levels

pavois standards

pavois verify

Behavioral validation: attempt the forbidden action, confirm the protection holds

pavois verify <target>

Flags

--keystringSSH private key for the target

pavois version

Print pavois version

pavois version