Agents are not a vibe. They are software with the ability to act, and action without constraint is just an error budget waiting to be spent.
Four primitives every agent must use. Without these, nothing else is real.
Each layer depends on the prior. Read-only first. Bounded writes earned, not assumed.
Every agent uses this template. No exceptions. This is how you prevent the agent layer from turning into folklore.
crm.read — query objects across all entitiescrm.write.merge — merge confirmed duplicates (gated)enrichment.lookup — domain/firmographic resolutionaudit.log — provenance write for every action{entity_id, action, confidence, evidence[]}agent_idactionentity_idsconfidenceevidencemodel_versiontool_callsapproval_statetimestampEvery agent has an entry. Name, purpose, owner, tools, permissions, data domains, escalation path, version.
Identity is normalized. Signals are interpreted into probability deltas. Routing recommendations are produced. Every output has provenance. Nothing writes without approval.