Three steps, and you already run two of them.
There is nothing to install in the cluster, nothing to grant and nothing to sign up for. headroom reads the JSON that terraform already knows how to print, so the first real answer is about a minute away.
-
01
Install the binary
One line, or a download you verify against the published checksums. It is a single static binary, so there is no runtime to install first and nothing to configure before the first run.
$curl -fsSL https://headroomcli.com/install.sh | sh
-
02
Print the plan you already make
terraform plan then terraform show -json, the two commands your pipeline runs anyway. The JSON stays on your disk: headroom reads the file, it does not connect to your account or to your cloud.
$terraform plan -out=tfplan
$terraform show -json tfplan > plan.json
-
03
Run it, and read the ceilings
headroom analyze plan.json prints every resource that runs out first, with the number, the source behind it and the percentage of your authorised scale. Add --fail-on critical and the same command becomes the whole CI gate.
$headroom analyze plan.json
Flags worth knowing
--json- Findings as JSON, for a CI gate or a dashboard you already own.
--dry-run- Print the exact redacted payload that would be uploaded, and upload nothing.
--fail-on critical- Exit 1 on critical, or on warning and worse. That is the whole CI integration.
--pool-size N- Connections per task to assume when the task definition does not declare one.
--warn-at R- Utilization ratio that triggers a warning. Default 0.8.
--salt S- Per organization salt used to hash resource addresses.
--no-update-check- Silence the once a day check for a newer release. HEADROOM_NO_UPDATE_CHECK=1 does the same.
A headroom.yaml at the root of the repository is picked up automatically: tune a rule, state a fact about your account that no plan can state, or silence a finding with a mandatory reason and an expiry date, so the finding comes back on the day the reason ran out.