What it does
CRM Hygiene Agent cleans up the record quality problem every sales team has and nobody schedules time for: duplicate contacts, inconsistent phone and email formats, missing fields, and values that were never valid in the first place. You pass the records in and it returns a set of proposed changes, each tagged high or low confidence. The detection is deterministic and code-derived. Duplicates are found by comparison rather than guesswork, formats are normalised against fixed rules, and every missing or invalid field is named with the record it belongs to. A language model is used only to summarise the proposal and suggest enrichment, and any enrichment it suggests is grounded in the fields you supplied and flagged low confidence — it does not invent a job title or a company that was not in the data. The safety property is the part worth reading. This agent never writes to a CRM. `apply_changes` is a deliberate refusing stub: without confirmation it returns the change set for review, and even with confirmation it returns only a would-apply plan. There is no code path that touches your records. That means you can run it against a production export without any of the usual anxiety about an automated cleanup tool. Field values are treated as data and never as instructions, which matters because CRM free-text fields are exactly where a pasted instruction would hide. `analyze_records` runs the deterministic pass alone if you just want the findings. `run_full` adds the summary and enrichment suggestions. No CRM connection and no credentials — it works on the records you provide. Built for sales operations, RevOps and anyone who has opened a CRM export and found the same company spelled four ways.
Finds the duplicates, bad formats and missing fields in your CRM records — as proposals it can never apply.
Example prompts
- Run run_full on these CRM contacts and propose dedupe/normalize cleanups with confidence tags.
- Run analyze_records on this batch — no LLM, just the deterministic findings and proposed changes.
- I have these proposed changes — call apply_changes (confirmed:false) and show me the confirmation-required plan.