# Semantic fingerprint

> A semantic fingerprint is how an in-product agent stores an interface element without depending on its markup. Instead of a CSS class or XPath, it records the element's role, accessible name, landmark position, and neighbours, then matches candidates against that fingerprint at runtime, so a restyle or re-render doesn't break the reference.

Canonical: https://peeve.ai/glossary/semantic-fingerprint/

## Why not use a CSS selector?

Because selectors encode the DOM, and the DOM changes on nearly every deploy. A button that moves from one wrapper to another keeps its role, name and neighbours but loses its selector. A fingerprint survives the change; a selector silently points at nothing, which is how selector-based tools break every release.

## How is a match scored?

Each signal contributes to a combined confidence between 0 and 1. Above 0.85 the agent acts; between 0.60 and 0.85 it checks a screenshot first; below 0.60 it stops and hands off rather than guessing. The threshold is the safety mechanism, not a heuristic to tune away.

**Related:** Drift detection, Capability registry, In-app guidance.
