ABILITY-040
Multi-Channel Delivery
All reports and alerts are delivered across Discord (primary command center) and Outlook (email digests via Microsoft Graph API). Inbound texts are monitored via the FUB events API. Every channel stays in sync with zero third-party SMS or Gmail dependency.
Always active
ABILITY-055
Discord Slash Commands
Type /leads hot, /pipeline, /find [name], /schedule, or /approvals directly in Discord to query Vesta in real time. Your CRM and pipeline available from any channel, instantly.
On demand via Discord
ABILITY-056
Email Approval Buttons
Email drafts post to #approvals with Send, Edit, and Discard buttons and an individual thread per draft. One tap to approve, one tap to discard. No email goes out without a human making the final call.
On each new email draft
ABILITY-059
Urgent Role Alerts
Pings the @urgent role in Discord when a high-priority signal fires: a $500K+ budget new lead, a 30-day silent lead who just replied, or a rate drop triggering mass outreach. Never miss a critical moment.
Event-driven via bot
ABILITY-061
Schedule via Discord
Type /schedule [name] [date] [time] in Discord to send a formatted iCalendar invite to any lead or client instantly. No need to open Gmail or your calendar app — scheduling happens from the command center.
On demand via /schedule
ABILITY-062
Hourly Backup
Full compressed backup of the entire Vesta system to ~/vesta-backups/ every hour, around the clock. Retains 14 rolling days of backups and auto-purges older archives. Runs silently — logs to /tmp/vesta-backup.log without Discord noise.
Hourly (cron)
ABILITY-063
Listing Description Writer
AI-drafts compelling MLS listing descriptions from property details — interactive CLI or triggered from other scripts. Every draft queues to #approvals before use. Never a copy-paste template.
Manual trigger
ABILITY-067
Social Media Post Generator
Drafts Instagram and Facebook captions for new listings and price reductions — with hashtags, pricing, and property highlights included. Queues to #approvals before any content is posted.
Manual trigger
ABILITY-071
Scribe Mini-Agent
A Sonnet-powered AI sub-agent for all content creation: listing descriptions, social media posts, neighborhood reports, market copy, and email templates. Spawned by Vesta automatically when content writing is needed.
On demand · spawned by Vesta
ABILITY-072
Sage Mini-Agent
A Sonnet-powered AI sub-agent with deep knowledge of GRAR forms, Michigan real estate law, training materials, and PSI exam content. Auto-fills offer letters, contracts, and answers any document or law question.
On demand · spawned by Vesta
ABILITY-073
General Message Handler
Vesta responds to every non-bot message sent anywhere in the Discord server — no slash command needed, no mention required. Natural conversation, always on. Ask her anything from any channel.
On any message
ABILITY-074
File Attachment Reading
Vesta reads text file attachments sent to Discord (UTF-8 and Latin-1 encoding) and includes the full file content in the Claude prompt for analysis, summarization, or action. Binary and PDF files are rejected with a clear error.
On message with attachment
ABILITY-075
Persistent Memory / Directives System
Natural-language phrases like "commit this to memory", "direct order", or "standing order" trigger auto-save to the vesta_memory database table. All stored directives are injected into every future Claude prompt — Vesta remembers what matters permanently.
Keyword detection on message
ABILITY-076
Conversation Context Memory
Before calling Claude, Vesta fetches the last 8 messages from the current channel as conversation history. Claude sees the full thread context — not just the current isolated message — enabling coherent multi-turn conversations.
On every Claude call
ABILITY-077
Lead Auto-Card on Mention
After Vesta replies in any channel, she scans the message for any known lead name (3+ characters). If found, she auto-posts a full lead card embed with phone number, pipeline stage, lead score, email, and most recent note — no slash command needed.
After every reply
ABILITY-078
/memory Slash Command
/memory list shows all stored directives with IDs and dates. /memory delete [id] removes a specific stored directive. Responses are ephemeral — only visible to the invoking user to keep channels clean.
On demand via /memory
ABILITY-079
Approval Timeout + Auto-Discard
A poll task runs every 30 minutes. Email and SMS drafts sitting in the approval queue for 24+ hours without a response are automatically discarded. A summary of discarded drafts posts to #system-health. No perpetual backlog.
Every 30 min (bot poll)
ABILITY-080
Lead Score Change Alerts
Hourly poll compares current lead scores to the last recorded score in lead_score_history. Posts an alert to #lead-alerts when any lead's score changes by 20 or more points in either direction — catch rising opportunities and sinking risks immediately.
Hourly (bot poll)
ABILITY-081
Morning Briefing Owner DM
In addition to the public Discord briefing, Vesta sends a private DM to the owner (Aiden) every morning at 8 AM with the full priority list: pending approvals, hot leads, and pre-qual flags — before the workday begins.
Daily · 8 AM (bot task)
ABILITY-082
Threaded AI Conversations
After Vesta replies in a main Discord channel (outside of an existing thread), she automatically creates a new thread from the reply message. Keeps AI conversations organized and prevents channel clutter.
After every reply in main channel
ABILITY-083
/remind Slash Command
/remind message:"text" when:"3 days" stores a timed reminder in the database. Supports minutes, hours, days, and weeks. Fires via DM or the original channel when due. Never forget a follow-up date again.
On demand via /remind
ABILITY-084
Richer /find Results
/find results include the lead's most recent FUB note (first 80 characters) and a score trend arrow (↑15 / ↓8) pulled from lead score history. Full context on any lead in one slash command.
On demand via /find
ABILITY-085
Service Health Watchdog
Daily poll at 9 AM checks SQLite database connectivity, all 10 Discord webhook URLs, and systemd status of 4 core running services. Posts a color-coded embed to #system-health — green if all clear, red with specifics if issues are detected.
Daily · 9 AM (bot poll)
ABILITY-086
/done Thread Close Command
/done inside any Discord thread posts a confirmation message, then archives and locks the thread. Prevents cluttered open threads from piling up after issues are resolved. Rejected with an ephemeral error if used outside a thread.
On demand via /done
ABILITY-087
Directive Binary Validation
Before storing any memory directive, Vesta detects binary files and PDFs and rejects them with a clear error message. Only readable plain-text content is committed to memory — preventing garbage data from polluting future Claude prompts.
On memory store attempt
ABILITY-092
/notes Slash Command
Type /notes [lead name] [your notes] in Discord to dictate showing notes on the go. Saves immediately to the local database and posts an update note to Follow Up Boss — CRM stays current without opening a laptop.
On demand via /notes