Trust evidence
Expiring, typed evidence that policy can require — not a reputation score.
Trust in Veefore is a set of evidence records, each with a type, an issuer, a status and an expiry. It is not a number, and that is the point: a score of 72 tells an operator nothing they can act on, while "the security attestation expired eleven days ago" tells them exactly what to do.
#Evidence types
| Type | Attests |
|---|---|
IDENTITY_VERIFICATION |
The agent's identity has been verified |
ORGANIZATION_VERIFICATION |
The owning organization has been verified |
SECURITY_ATTESTATION |
A security review or scan has been completed |
COMPLIANCE_EVIDENCE |
A compliance control has been satisfied |
PUBLISHER_VERIFICATION |
The publisher of the agent has been verified |
PROTOCOL_COMPLIANCE |
The agent conforms to a protocol specification |
OPERATIONAL_HISTORY |
A record of operating cleanly over a period |
INCIDENT_HISTORY |
Involvement in past incidents |
Statuses: VALID, EXPIRING, EXPIRED, REVOKED.
EXPIRING exists so there is a window in which you can act before enforcement
starts refusing. A policy requiring valid security attestation, with attestation
quietly lapsing overnight, is an outage you did not schedule.
#Recording evidence
bashcurl -X POST https://veefore.example.com/v1/trust/evidence \
-H "Authorization: Bearer $VEEFORE_API_KEY" \
-H 'content-type: application/json' \
-d '{
"agent_id": "agt_01JAV…",
"type": "SECURITY_ATTESTATION",
"issuer": "internal-security-review",
"expires_at": "2027-04-01T00:00:00.000Z",
"detail": { "review_id": "SEC-2026-118", "scope": "code and dependencies" }
}'
Requires trust:manage, which SECURITY_ADMIN holds and DEVELOPER does not —
an agent's author should not be the one attesting that the agent is safe.
#Reading it
httpGET /v1/trust/{agentId}
Returns the evidence summary and an explanation of what is present, what is expiring, what has lapsed, and what a policy requiring each type would currently decide.
#Using it in policy
Six fields are available to rules:
| Field | Type |
|---|---|
trust.identity_verified |
boolean |
trust.organization_verified |
boolean |
trust.security_attestation_valid |
boolean |
trust.protocol_compliance_valid |
boolean |
trust.active_incidents |
number |
trust.expired_evidence_count |
number |
The _valid fields are true only when evidence of that type exists and has
not expired. Expiry is folded into the field, so a rule cannot accidentally
accept stale evidence.
json{
"id": "rule-production-requires-attestation",
"name": "Production needs valid security attestation",
"priority": 880,
"enabled": true,
"when": {
"kind": "group",
"id": "g-prod-attestation",
"operator": "and",
"children": [
{
"kind": "condition",
"id": "c-env-prod",
"field": "environment.type",
"operator": "eq",
"value": "PRODUCTION"
},
{
"kind": "condition",
"id": "c-attestation",
"field": "trust.security_attestation_valid",
"operator": "is_false"
}
]
},
"then": {
"decision": "BLOCK",
"reason": "A valid security attestation is required to act in production."
}
}
Refused with TRUST_EVIDENCE_INSUFFICIENT when the pipeline's trust stage
determines required evidence is missing or expired.
Open incidents are also directly testable, which is a useful safety interlock:
json{
"kind": "condition",
"id": "c-active-incidents",
"field": "trust.active_incidents",
"operator": "gt",
"value": 0
}
Pair that with REQUIRE_APPROVAL and an agent under active investigation needs a
human for everything until the incident is closed.
#Risk reads it too
TRUST_EVIDENCE is one of the thirteen risk signals. It fires when required
evidence is missing, expiring or expired, and contributes to the risk score — so
lapsed evidence raises risk even if no policy explicitly requires that type.
A single lapse therefore has two independent effects, which is intentional
defence in depth: the score rises, and any rule testing the _valid field flips.
#Trust and A2A
For agent-to-agent, trust evidence is how you decide whether a verified remote agent is one you want to deal with. Passport verification proves who they are; trust evidence informs whether you should. They answer different questions and you generally want both.