An agent reuses tokens when it knows they exist, knows what each one means, and is checked when it does not. Give it the resolved token list (name, role, value in each theme) rather than a config file it has to interpret, state one rule plainly (never write a raw value when a token exists), and scan its output for exact drift: a raw value identical to a token is always a mistake you can fix mechanically.
Resolved, not raw
A token like --content-brand may be defined as rgb(var(--content-brand) / <alpha-value>) in a Tailwind config and resolve to different values in light and dark mode. An agent reading the config sees indirection; an agent given the resolved table sees #b094e6 in dark and #5227a5 in light, and can choose correctly.
Roles beat values
Agents pick tokens by meaning. Names like color-bg, fg-muted or verified carry a role; names like purple-500 do not. Where your tokens are named by value, add the role in the hand-over.
Make reuse checkable
Exact drift is the cleanest signal there is: a hard-coded value string-identical to a declared token. Saer reports it with the token to use instead and every file it appears in.
saer scan . --jsonWhat Saer does about this
- Colour tokens resolved across themes and modes, with exact drift and near-matches: in the beta.
system.jsonwith every token, its value per context and its derivation chain.
- Agents other than Codex:
saer mcpworks with Claude Code and Cursor, but its benchmark so far measured Codex only.
Every capability and its state: what Saer checks.
See it on your own codebase.
Request early access