
Automations, recipes, and agents
Automations in Closr are recipes: a trigger plus one or more actions. The fastest way to make one is to describe it in chat. "When a lead replies, text me." "When a deal closes, tag the contact 'past client'." "When a lead views /pricing 3 times in a week, move them to Hot." Closr picks up the trigger, picks up the actions, surfaces the rule as a card for you to confirm, and writes it when you say go.
There's also a Settings → Automations page if you want to see them all in a list, toggle them on and off, or audit firing history.
Building a rule from chat
Open any chat thread. Say what you want. The grammar Closr listens for is loose, but the underlying shape is always trigger + action:
"When a new lead lands from Facebook, tag them 'fb' and send the FB nurture campaign."
Closr responds with an automation card showing:
- •Trigger: `LEAD_CREATED` with filter `source = Facebook`
- •Action 1: `ADD_TAG` with config `tag = fb`
- •Action 2: `ENROLL_CAMPAIGN` with the FB nurture you've built
Click "Save" and it's active. Click "Edit" if you want to tighten the filter or change an action. Nothing fires until you save.
Triggers
These are the trigger types the engine actually evaluates today:
- •**`LEAD_CREATED`**: a new lead lands from any source (website, FB, Realtor.ca, Zillow.ca, API, manual)
- •**`LEAD_STAGE_CHANGED`**: a deal moves columns on the pipeline kanban (only fires on actual stage transitions, not on every tag/value edit)
- •**`LEAD_WON`**: a deal flips to WON
- •**`LEAD_LOST`**: a deal flips to LOST
- •**`EMAIL_REPLIED`**: an inbound email lands from a contact you've previously emailed
- •**`SMS_RECEIVED`**: an inbound SMS lands on your Closr number
- •**`CALL_COMPLETED`**: a Twilio voice call ends with a post-call summary
- •**`CAMPAIGN_COMPLETED`**: a contact finishes every step of a campaign
- •**`PAGE_VIEWED`**: a tracked contact loads a page on your website (carries a 7-day count + a repeat-pathname flag, so you can write "viewed N times in a week" rules)
- •**`DAYS_SINCE_CONTACT`**: a contact crosses a no-activity threshold (declared but not yet wired to a cron; rules using this save but don't fire yet)
- •**`EMAIL_OPENED`**: high-noise; declared but not wired by default to avoid trigger floods
Conditions narrow a trigger. "When a lead is created **and source equals Facebook**". The condition operators are `equals`, `contains`, `greater_than`, `less_than`, `is_empty`, `is_not_empty`. Multiple conditions AND together by default; flip to OR per row.
Actions
The engine handles three actions reliably today:
- •**`MOVE_STAGE`**: move the lead to a specific pipeline stage. Configure with `stageId`.
- •**`ADD_TAG`**: append a tag to the contact (or lead). Configure with `tag`.
- •**`NOTIFY_AGENT`**: send a push + in-app notification to the assigned agent. Configure with `message`.
The schema also declares `SEND_EMAIL`, `SEND_SMS`, `ENROLL_CAMPAIGN`, `CREATE_TASK`, and `ASSIGN_AGENT`. Some of those run through adjacent surfaces (`ENROLL_CAMPAIGN` works through the Campaigns enrollment path; assignment is handled by routing rules). The Settings UI only surfaces the three actions the executor reliably handles end-to-end, so the dropdown doesn't promise behaviour the backend will silently swallow. If you ask for one of the others in chat and Closr offers to wire it, it'll route you to the right surface (a campaign auto-enrollment, a routing rule) instead of writing an automation that no-ops.
Closr's AI agents
Separate from rule-based automations, Closr ships three first-class AI teammates that act like users. They appear in `@mention` pickers and assignee dropdowns alongside your human teammates. You hand them work the same way you hand work to a real person.
- •**`@research`**: Closr Research. Pulls comparable sales, market context, neighbourhood data, and recent activity on contacts or deals. Best when you say "research this contact" or "what's the market doing in Etobicoke".
- •**`@recap`**: Closr Recap. Summarizes a conversation or deal thread into 3-5 bullets: what happened, what's outstanding, what's next. Best when a thread has gotten long and you need the state-of-play.
- •**`@outreach`**: Closr Outreach. Drafts follow-up emails and SMS in your voice, anchored to the most recent thing on the deal. Best when you don't want to think about how to phrase the next message.
Mention any of them in chat (`@research check on 142 Eastern`). They run in the same thread, post their output as a normal message, and respect their own tool whitelist so they can't reach beyond their role.
Recipes (saved prompts)
A recipe is a saved prompt you can rerun without retyping. Slash menu in chat + Cmd+K palette both surface them. Closr seeds a default library on first chat:
- •`/recap-deal`: recap the deal in this thread
- •`/draft-follow-up`: draft a follow-up email to the linked contact
- •`/summarize-showings`: pull showing feedback into a one-page summary
- •`/check-conditions`: list outstanding conditions + deadlines on the deal
- •`/comps-nearby`: pull comparable solds near the deal's property
- •`/draft-listing-blurb`: write the MLS public-remarks paragraph from a listing
Add your own under Settings → Recipes. Each recipe is title + prompt + optional description + a `showInPalette` flag. Mustache tokens like `{{contact.firstName}}` resolve at run-time.
Inline AI (Cmd+J)
In any note or comment textarea (the activity log form on contact and lead detail pages), press Cmd+J to open a small AI prompt. Type what you want ("rewrite this in two sentences", "draft a polite reminder for the seller about the condition deadline") and the result streams in below the textarea. Accept, edit, or dismiss. Doesn't replace your text; you paste it in yourself.
The daily digest
Closr emails you a once-a-day digest at the same hour as the morning brief. It rolls up the last 24 hours: deals that advanced, conditions that went overdue, comms waiting on a reply, new leads, eSign envelopes awaiting signature. If everything's empty, no email goes out (silence beats noise). Toggle it off under Settings → Profile if you prefer the in-app brief alone.
Rules toggle on and off via the Settings → Automations list. If something stops firing unexpectedly, check there first; an accidental disable is the most common cause.
Where to go next
- •`lead-intake`: wire the source events that fire `LEAD_CREATED`
- •`campaigns`: the enrollment target for "drip these new leads" automations
- •`web-tracker-install`: what makes `PAGE_VIEWED` fire
- •`cmd-k`: where recipes show up alongside global search