Business CRM Intake
What it is
A bounded small-business workflow that qualifies incoming messages and writes structured CRM records.
Operating shape
- Difficulty:
intermediate - Cadence:
event or daily - Category:
business
Core concepts
- Business CRM
- Inbox Triage
- Skills
- Toolsets
- Approval Boundaries
Source evidence
vendor/hermes-agent/toolsets.py#<file>— Structural Source Map fallback for toolsets.py. A core source file in the Tool Registry and Toolsets structure within Tools, Toolsets, and MCP.
Related articles
- Hermes for Small Business: Turning Inbox Messages into a Maintainable CRM Workflow
- The Ultimate Beginner’s Guide to Hermes: From First Installation to an AI Operations Team
Implementation pattern
Outcome
Turn a controlled local CSV fixture into a reviewable CRM draft while proving that duplicates, irrelevant mail, and ambiguity are handled without sending anything or touching a production CRM.
Before you start
- Work in a disposable folder and use synthetic
.testaddresses only. - Keep Gmail, Sheets, Composio, and every production connector disabled for this minimum viable product (MVP).
- Confirm a basic Hermes chat works; filesystem checkpoints are recommended for the disposable folder.
Input and output contract
Input is inbox-sample.csv with four known cases. Output is only crm-draft.csv plus crm-audit.md. Each source message_id must appear exactly once in the audit. Only a clear proposal may be qualified; a repeat is duplicate, a newsletter is irrelevant, and uncertain intent is review. Missing values remain unknown. No email is sent and no remote system is read or written.
message_id,received_at,name,email,organization,proposal
m-001,2026-07-01,Ada,ada@example.test,North Studio,Partnership enquiry for a product review
m-002,2026-07-02,Ada,ada@example.test,North Studio,Duplicate follow-up to m-001
m-003,2026-07-03,Cai,cai@example.test,Unknown,General newsletter with no partnership request
m-004,2026-07-04,Dee,dee@example.test,South Lab,Ambiguous request requiring human review
Expected crm-draft.csv: one new row for m-001, no new lead for m-002 or m-003, and no automatic decision for m-004. crm-audit.md records all four classifications and reasons.
Build it
Save the fixture as inbox-sample.csv, then run:
hermes chat --checkpoints --toolsets "file" -q "Read inbox-sample.csv. Create only crm-draft.csv and crm-audit.md. Classify every message_id as qualified, duplicate, irrelevant, or review; explain the source evidence. Add only clear qualified records to the draft. Preserve unknown values, never invent contact data, do not access the network, do not send replies, and do not modify the input."
Require this draft header: message_id,received_at,name,email,organization,status,reason,source.
Verify it
- Compare the output to the four-case contract;
m-001is the only new qualified draft row. - Confirm every input
message_idappears once incrm-audit.mdand the source column namesinbox-sample.csv. - Hash or diff
inbox-sample.csvbefore and after; it must be unchanged. - Search the terminal/session log for network, send, Gmail, Sheets, or CRM writes; there must be none.
- Run the same fixture again: the result must not create a second
m-001row.
If it fails
- If a row is missing or duplicated, reject the output and ask Hermes to reconcile by
message_idagainst the same fixture. - If any value is fabricated, restore the checkpoint, strengthen the
unknownrule, and rerun. - If an external connector is attempted, stop the run, remove its credentials from the test profile, and return to the local fixture.
- Do not graduate to real data until all four cases pass twice.
Safety, privacy, and cost
Synthetic data avoids exposing customer personal information during design. The explicit file toolset is the capability boundary for this local lab; the prompt is an additional instruction, not the security control. A real rollout needs least-privilege OAuth scopes, retention rules, an audit trail, a test account, and human approval for replies or CRM writes. Composio is an external integration and is not used or documented as a built-in Hermes requirement in this lab. A single bounded local pass limits model cost; repeated retries should trigger contract repair, not an open-ended agent loop.

