The idea was simple: what if you could talk to your CRM?

Not fill out forms. Not navigate menus. Not remember which page has the pipeline stats and which one has the customer lookup. Just ask. "How many open quotes do I have?" "What's the average ticket this month?" "Create a lead for John at 1240 Oak Street." Natural language in, CRM action out.

Bermuda — originally called Lawn Buddy before it earned a more permanent name — is a chat panel that floats or docks to the side of any page in the application. Behind it: an Anthropic tool-use loop with thirteen CRM tools. Search customers. Look up orders. Pull pipeline statistics. Calculate quotes based on square footage and product pricing. Create leads. Check revenue trends. The AI calls tools iteratively, gathering information until it has enough to answer the question, then responds in natural language.

Three database tables support the system: conversations, messages, and memories. The memory table stores user preferences, facts, and instructions that persist across conversations — the assistant learns that you prefer to see revenue numbers weekly, or that "Jim" always means a specific customer, or that quotes over $500 should include a discount note. It gets better the more you use it.

The frontend is a floating chat component that can dock to the right side of the screen. Conversation sidebar shows history. Messages render with markdown formatting for structured responses. The panel lives in the app layout, available on every page.

Four API endpoints: list conversations, get messages, send a message, delete a conversation. Tenant isolation on every query. Plan gating at both layers — the frontend hides the panel for non-Pro users, and the backend rejects API calls from tenants without the ai_copilot service type. Belt and suspenders, because a chat interface that leaks data between tenants isn't a feature — it's a liability.

The tool-use architecture is the right pattern for this. The AI doesn't try to answer from memory. It asks the database. Every answer is grounded in real data, retrieved in real time, scoped to the tenant making the request.