A finding without the API call that produced it is an opinion. How kaveo records, links, and cites its evidence.
Every security scanner produces findings. Very few produce evidence. The difference sounds
academic until you're in an audit, a vendor review, or an incident retro — the three rooms
where "the dashboard said so" is not an acceptable sentence.
When kaveo reports S3 bucket allows public read, that is a claim about the world at a moment
in time. Claims invite questions. Which API call established it? What did the response actually
say? Was that before or after Tuesday's change window? Can you show me?
Most tools answer with a severity color. The finding exists because the tool says it exists,
and when an engineer disputes it — "we fixed that," "that's the marketing bucket, it's supposed
to be public" — the conversation has nowhere to go but opinion.
kaveo's detectors work only from what a scan has already collected and recorded. What each
collector reads becomes a row in an append-only evidence ledger: one row per collector run by
default, and one per API call and page for collectors that report each call, such as IAM. Each
row records the call, for example page 2 of iam:GetAccountAuthorizationDetails, and a SHA-256
hash of the resources it returned, not the payload itself. A database trigger rejects any edit
to those rows.
A finding about a collected resource links to the stored observation behind it, and the API
returns that link for every finding. An assessor can check the source without trusting
our UI at all.
Three rooms where this changes the conversation:
The audit. The assessor asks how you know encryption was enforced in March. You hand
them March's scan and the observations behind each finding, not March's screenshots.
The dispute. An engineer says the finding is stale. The scan the evidence belongs to
settles it in thirty seconds, in either direction.
The retro. You need to know when the bucket went public. Each scan's observations are a
timeline, not an argument.
Evidence-backed findings only work because detection is deterministic. Each detector is a pure
function of what the scan collected: same state in, same findings out, every time. A
probabilistic detector can't produce this kind of evidence — you can't replay a hunch.
kaveo can use a language model for one kind of job: explaining findings and drafting
remediation guidance in plain English. It is off by default, it never creates a finding, and
any claim it makes that doesn't cite a stored observation is dropped before it is saved.
Reasoning on top, determinism underneath.
If a security product's claims can't survive the question "show me," the product is a
dashboard. Evidence or it didn't happen.