[{"data":1,"prerenderedAt":1250},["ShallowReactive",2],{"search":3,"content-guide\u002Fai-agent":442,"surround-\u002Fguide\u002Fai-agent":1245},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,323,327,331,335,339,343,347,351,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423,426,430,434,438],{"path":5,"title":6,"description":7},"\u002Fguide","Guide","Product guides for Owlat — a modular, self-hosted email platform. Learn how to send campaigns, run a personal mailbox, manage a team inbox, and more.",{"path":9,"title":10,"description":11},"\u002Fguide\u002Fgetting-started","Welcome to Owlat","Set up your Owlat workspace and send your first email — from deploying the stack to verifying a domain, building your audience, and launching a campaign.",{"path":13,"title":14,"description":15},"\u002Fguide\u002Fcontact-properties","Contact Properties","Custom fields that extend built-in contact data with your own values for segmentation.",{"path":17,"title":18,"description":19},"\u002Fguide\u002Ftopics","Topics","Topics are explicit audience groups you manage by hand — ideal for opt-in subscribers, imported cohorts, and organized contact buckets you target with campaigns.",{"path":21,"title":22,"description":23},"\u002Fguide\u002Fsegments","Segments","Build dynamic, rule-based contact groups from properties, email activity, and topic membership, re-evaluated from current data each time they're used.",{"path":25,"title":26,"description":27},"\u002Fguide\u002Fforms","Forms","Form Endpoints collect new contacts from your website or landing pages by exposing a public endpoint that accepts submissions and feeds them into a topic.",{"path":29,"title":30,"description":31},"\u002Fguide\u002Fcampaigns","Campaigns & Reporting","Build and send marketing campaigns to a topic or segment with the five-step wizard, optional A\u002FB testing, and full delivery reporting.",{"path":33,"title":34,"description":35},"\u002Fguide\u002Fab-testing","A\u002FB Testing","Compare two variants of a campaign on a test group, then automatically or manually send the winning version to the rest of your audience.",{"path":37,"title":38,"description":39},"\u002Fguide\u002Fautomations","Automations","Send emails automatically based on triggers, delays, and conditions — build welcome series, trial flows, and follow-ups once and let Owlat run them.",{"path":41,"title":42,"description":43},"\u002Fguide\u002Ftransactional","Transactional Emails","One-to-one emails your application triggers in response to a user action — password resets, order confirmations, welcome emails, and similar notifications.",{"path":45,"title":46,"description":47},"\u002Fguide\u002Fcreate-campaign","Create a Campaign","Walk through Owlat's five-step campaign wizard: Basics, Audience, Content, A\u002FB Test, and Review & Send.",{"path":49,"title":50,"description":51},"\u002Fguide\u002Fsend-campaign","Send & Monitor a Campaign","How to send your campaign and track its performance with real-time metrics.",{"path":53,"title":54,"description":55},"\u002Fguide\u002Fquick-start","Quick Start","The fastest path from a blank Owlat workspace to a live email campaign, from your first template through sending and reviewing results.",{"path":57,"title":58,"description":59},"\u002Fguide\u002Ftransactional-setup","Transactional Email Setup","Set up and send transactional emails like password resets and order confirmations via the Owlat API and SDKs.",{"path":61,"title":62,"description":63},"\u002Fguide\u002Fdeliverability","Deliverability","Verify sending domains, manage your blocklist, monitor sending reputation, and stay compliant so your emails reach the inbox.",{"path":65,"title":66,"description":67},"\u002Fguide\u002Fapi-keys-webhooks","API Keys & Webhooks","Create API keys for programmatic access and set up outbound webhooks to receive real-time notifications for email and contact events.",{"path":69,"title":70,"description":71},"\u002Fguide\u002Ffeature-flags","Feature flags","Owlat is modular — every feature listed in this guide can be turned on or off. This page is the user-facing overview of how to do it.",{"path":73,"title":74,"description":75},"\u002Fguide\u002Fteam-permissions","Team & Permissions","Use role-based access to control what each member of your organization can do, with Owner, Admin, and Editor roles.",{"path":77,"title":78,"description":79},"\u002Fguide\u002Faudit-logs","Audit Logs","A chronological record of significant actions in your Owlat organization, so you can see who did what and when.",{"path":81,"title":82,"description":83},"\u002Fguide\u002Fshare-links","Share Links","Create temporary preview links to share email designs with stakeholders who don't have dashboard access.",{"path":85,"title":86,"description":87},"\u002Fguide\u002Fpostbox","Postbox — Personal Email","Per-user mailboxes with a webmail interface and native IMAP\u002FSMTP support. Run your own Gmail-equivalent personal mailbox on your Owlat instance.",{"path":89,"title":90,"description":91},"\u002Fguide\u002Fmigrate-from-google","Migrate from Google","Import your full Gmail history into Owlat over IMAP, and let your AI assistant learn from every imported conversation.",{"path":93,"title":94,"description":95},"\u002Fguide\u002Fteam-inbox","Team Inbox","Triage inbound email as a team: read AI-classified threads, approve, edit or reject agent drafts, work the review queue, and manage quarantine.",{"path":97,"title":98,"description":99},"\u002Fguide\u002Femail-editor","Email Editor","A block-based visual editor for building responsive emails that render consistently across desktop, mobile, Outlook, Gmail, and Apple Mail.",{"path":101,"title":102,"description":103},"\u002Fguide\u002Fai-agent","AI Agent & Autonomy","Configure the AI agent that classifies and drafts replies to inbound mail: auto-reply settings, the health dashboard, circuit breakers, autonomy rules, and the knowledge backfill.",{"path":105,"title":106,"description":107},"\u002Fguide\u002Fknowledge-graph","Knowledge Graph","Browse, search, and manage Owlat's typed organizational knowledge — the 7 entry types, source attribution, confidence decay, relations, and how entries are extracted from mail.",{"path":109,"title":110,"description":111},"\u002Fguide\u002Ffiles","Files","Upload, browse, search, tag, and version documents in the file library.",{"path":113,"title":114,"description":115},"\u002Fguide\u002Fchat","Team Chat","Use Owlat's built-in team chat: public and private channels, direct messages, mentions, attachments, and channels linked to an inbox conversation.",{"path":117,"title":118,"description":119},"\u002Fguide\u002Fcode-tasks","Code Tasks","Queue coding-agent tasks, watch them move from queued through review, and run the code-worker sidecar that opens the pull requests.",{"path":121,"title":122,"description":123},"\u002Fguide\u002Faudience-data","Audience Data: Identities, Relationships & Timeline","Unify a contact across email, phone, and messaging channels, merge duplicates, map relationships, and read the cross-channel interaction timeline.",{"path":125,"title":126,"description":127},"\u002Fguide\u002Fimporting-contacts","Importing & Exporting Contacts","Bring contacts into Owlat from a CSV or from Mailchimp and Stripe, export them back out, and run bulk operations on your audience.",{"path":129,"title":130,"description":131},"\u002Fguide\u002Faccount","Your Account & Data","Export your data as JSON or CSV, request account deletion with a 30-day grace period, and use the onboarding checklist and the public preference center.",{"path":133,"title":134,"description":135},"\u002Fguide\u002Fchannels","Communication Channels","Configure SMS, WhatsApp, and generic-webhook channels, monitor channel health, and understand which channels are fully live today.",{"path":137,"title":138,"description":139},"\u002Fguide\u002Fdesktop-app","Desktop App","Install the Owlat desktop app, connect one or more workspaces, switch between them, and use native notifications, tray badges, shortcuts, and deep links.",{"path":141,"title":142,"description":143},"\u002Fguide\u002Femail-templates","Email Templates","Reusable email designs that define the structure, content, and personalization of every campaign and transactional message you send in Owlat.",{"path":145,"title":146,"description":147},"\u002Fguide\u002Fai-assistant","AI Assistant","Owlat's multi-turn, streaming, tool-calling AI assistant — a private chat surface that can search your workspace and draft copy, plus @assistant replies inside team chat.",{"path":149,"title":150,"description":151},"\u002Fguide\u002Fsecurity-scanning","Sending Security & Scanning","Owlat's security scanning: a content check for spam and phishing, an attachment scan for malware, and a Google Safe Browsing URL check. Suspicious content goes to a review queue.",{"path":153,"title":154,"description":155},"\u002Fguide\u002Fsystem-updates","System & Updates","The owner-only System & Updates screen: your current Owlat version, container health, LLM spend, and the in-app one-click updater with history.",{"path":157,"title":158,"description":159},"\u002Fguide\u002Foperating-modes","Operating Modes","The different ways to run Owlat at a company — read external mailboxes over IMAP, send transactional or marketing email through a delivery provider, host your own mail server, or run a team inbox with AI — and the rules that keep each combination coherent.",{"path":161,"title":162,"description":163},"\u002Fguide\u002Fsaved-blocks","Saved Blocks","Create reusable, linked content blocks you can drop into any email — edit one and every email that uses it updates automatically.",{"path":165,"title":166,"description":167},"\u002Fguide\u002Fmedia-library","Media Library","Manage, organize, search, and reuse images and files across your emails from one centralized hub.",{"path":169,"title":170,"description":171},"\u002Fguide\u002Femail-theme","Email Theme","Set your organization's default colors, font, and email width so every new template starts from a consistent baseline.",{"path":173,"title":174,"description":175},"\u002Fguide\u002Ftranslations","Translations","Send one email in multiple languages: add per-language translations to a single template and Owlat picks the right version for each recipient.",{"path":177,"title":178,"description":179},"\u002Fguide\u002Fcontacts","Contacts","How to add, view, organize, and manage contacts in Owlat, including sources, the contact detail tabs, and subscription compliance.",{"path":181,"title":182,"description":183},"\u002Fapi","API Overview","Owlat exposes authenticated API endpoints under your Convex site URL.",{"path":185,"title":186,"description":187},"\u002Fapi\u002Fwebhooks","Webhooks","Owlat supports both outbound customer webhooks and inbound provider webhooks.",{"path":189,"title":190,"description":191},"\u002Fapi\u002Fpublic-endpoints","Public Endpoints","These routes are public-facing and usually accessed from email links or embedded forms.",{"path":193,"title":194,"description":195},"\u002Fapi\u002Fwebhook-payloads","Webhook Payloads","The authoritative wire contract for outbound webhooks: envelope, signature headers, per-event data shapes, and payload versioning.",{"path":197,"title":198,"description":199},"\u002Fapi\u002Finbound-channels","Inbound Channel Webhooks","Provider webhook reference for inbound SMS, WhatsApp, and generic-channel messages, plus the MTA mailbox and credential callbacks.",{"path":201,"title":202,"description":203},"\u002Fapi\u002Fauthentication","Authentication","Secure API access with organization-scoped API keys.",{"path":205,"title":206,"description":207},"\u002Fapi\u002Fsdk","TypeScript SDK","Typed client for the Owlat API, usable from Node.js, Bun, Deno, or any server-side JavaScript runtime.",{"path":209,"title":210,"description":211},"\u002Fapi\u002Fsdk-java","Java SDK","The official `owlat-sdk` package provides a typed client for interacting with the Owlat API from any JVM application. Requires Java 11+.",{"path":213,"title":214,"description":215},"\u002Fapi\u002Fcontacts","Contacts API","Manage contacts for your organization.",{"path":217,"title":218,"description":219},"\u002Fapi\u002Ftopics","Topics API","Manage topic membership through authenticated endpoints.",{"path":221,"title":222,"description":223},"\u002Fapi\u002Fevents","Events API","Send contact events to drive segmentation and automation triggers.",{"path":225,"title":226,"description":227},"\u002Fapi\u002Ftransactional","Transactional API","Send published transactional templates to a recipient.",{"path":229,"title":230,"description":231},"\u002Fapi\u002Fforms","Forms API","Capture subscribers through public form endpoints.",{"path":233,"title":234,"description":235},"\u002Fdeveloper","Developer Guide","Technical architecture, feature-flag model, and provider abstractions used by Owlat.",{"path":237,"title":238,"description":239},"\u002Fdeveloper\u002Fmta-system","MTA System","Owlat's custom Mail Transfer Agent for direct SMTP delivery with intelligent rate limiting, bounce processing, and IP warming.",{"path":241,"title":242,"description":243},"\u002Fdeveloper\u002Ffeature-flags","Feature flags — developer reference","How the Owlat feature flag system works: single source of truth, dependency resolution, docker profile mapping, and how to add a new flag.",{"path":245,"title":246,"description":247},"\u002Fdeveloper\u002Fhow-email-works","How Email Works","A technical deep-dive into how email actually works — from SMTP and DNS to authentication, deliverability, and the differences between marketing and private email.",{"path":249,"title":250,"description":251},"\u002Fdeveloper\u002Femail-security","Email Security","Content scanning, attachment validation, URL reputation checking, and malware detection for outbound emails.",{"path":253,"title":254,"description":255},"\u002Fdeveloper\u002Fpostbox-architecture","Postbox Architecture","How the Postbox personal-mail feature is wired — schema, IMAP server, app-password auth, outbound relay, inbound delivery, and external mailboxes.",{"path":257,"title":258,"description":259},"\u002Fdeveloper\u002Fproviders","Providers","Pluggable provider abstractions for LLM, email sending, notifications, vector stores, and analytics, selected per-deployment so self-hosters can swap implementations without code changes.",{"path":261,"title":262,"description":263},"\u002Fdeveloper\u002Fcampaign-internals","Campaign Internals","How the campaign backend works: two status machines, send pre-flight, the send orchestrator, emailSends records, and the priority workpools.",{"path":265,"title":266,"description":267},"\u002Fdeveloper\u002Faudience-internals","Audience Internals","Backend reference for contact resolution, the double opt-in lifecycle, topic subscription, the conditions registry, and segment evaluation.",{"path":269,"title":270,"description":271},"\u002Fdeveloper\u002Fautomation-internals","Automation Internals","How the automation run engine works: the step walker, the lifecycle state machine, trigger fanout, the three step types, and the resilience cron.",{"path":273,"title":274,"description":275},"\u002Fdeveloper\u002Fdeliverability-infrastructure","Deliverability Infrastructure","The Convex-side deliverability backend: provider routing, health-aware failover, sending reputation with auto-enforcement, IP warming cache, the blocklist, and the content-scan gate.",{"path":277,"title":278,"description":279},"\u002Fdeveloper\u002Farchitecture","Architecture Overview","Owlat follows a modern serverless architecture with real-time capabilities.",{"path":281,"title":282,"description":283},"\u002Fdeveloper\u002Fplatform-operations","Platform Operations","Operator reference for abuse status and the sending gate, the platform-admin roster, content review, org deletion, in-app self-update, dev endpoints, crons, and migrations.",{"path":285,"title":286,"description":287},"\u002Fdeveloper\u002Fscopes","Scopes","What each app and package in the Owlat monorepo is responsible for.",{"path":289,"title":290,"description":291},"\u002Fdeveloper\u002Fself-hosting","Self-Hosting","Deploy Owlat on your own infrastructure with Docker Compose. Complete guide from first boot to production.",{"path":293,"title":294,"description":295},"\u002Fdeveloper\u002Fself-hosting-config","Self-Hosting Configuration","Complete reference for Docker environment variables, Convex backend variables, service topology, and volume persistence.",{"path":297,"title":298,"description":299},"\u002Fdeveloper\u002Fself-hosting-dns-email","DNS & Email Setup","Configure DNS records, DKIM signing, SPF, DMARC, and bounce handling for reliable email delivery.",{"path":301,"title":302,"description":303},"\u002Fdeveloper\u002Fself-hosting-production","Production Deployment","Secure your self-hosted Owlat instance with TLS, firewall rules, backups, and monitoring.",{"path":305,"title":306,"description":307},"\u002Fdeveloper\u002Fself-hosting-maintenance","Maintenance & Updates","Keep your self-hosted Owlat instance up to date, manage backups, scale performance, and troubleshoot common issues.",{"path":309,"title":310,"description":311},"\u002Fdeveloper\u002Fself-hosting-desktop","Desktop Installer","Install Owlat on a bare Linux VPS straight from the desktop app over SSH — no terminal — with a live, animated provisioning timeline.",{"path":313,"title":314,"description":315},"\u002Fdeveloper\u002Fsetup-cli","Setup CLI & Installer","Operator reference for the Owlat self-host tooling: the install.sh one-liner, the owlat-setup CLI, the convex-deploy flow, and admin bootstrap.",{"path":317,"title":318,"description":319},"\u002Fdeveloper\u002Fconvex","Convex Backend","Owlat uses Convex as its serverless backend, providing real-time subscriptions, ACID transactions, and TypeScript-first development.",{"path":321,"title":202,"description":322},"\u002Fdeveloper\u002Fauthentication","Owlat uses BetterAuth with the Convex adapter for authentication and organization (team) management.",{"path":324,"title":325,"description":326},"\u002Fdeveloper\u002Femail-system","Email System","Owlat's email system consists of a visual editor, template management, and multi-provider sending infrastructure.",{"path":328,"title":329,"description":330},"\u002Fdeveloper\u002Femail-renderer","Email Renderer","The @owlat\u002Femail-renderer package converts editor JSON blocks into production-ready HTML emails with cross-client compatibility, CSS inlining, dark mode, and Outlook VML fallbacks.",{"path":332,"title":333,"description":334},"\u002Fdeveloper\u002Fenvironment-variables","Environment Variables","Reference for every environment variable Owlat reads across the Convex backend, web app, MTA, IMAP server, and mail-sync worker.",{"path":336,"title":337,"description":338},"\u002Fdeveloper\u002Fcomponents","Component Library","Reference for the reusable, auto-imported Vue UI components shipped in the packages\u002Fui layer.",{"path":340,"title":341,"description":342},"\u002Fdeveloper\u002Fdecisions","Architectural Decision Records","The architectural decision records for the Owlat project, each capturing the context, the decision, and the trade-offs involved.",{"path":344,"title":345,"description":346},"\u002Fdeveloper\u002Fdecisions\u002F009-model-routing","ADR-009: Task-Based Model Routing","Why Owlat supports per-task LLM model selection instead of using a single model for all pipeline steps.",{"path":348,"title":349,"description":350},"\u002Fdeveloper\u002Fdecisions\u002F010-listing-engine","ADR-010: Listing Engine","Why Owlat replaced four incompatible list-query contracts with one generic listing engine driven by per-entity descriptors.",{"path":352,"title":353,"description":354},"\u002Fdeveloper\u002Fdecisions\u002F001-custom-email-renderer","ADR-001: Custom Email Renderer Over MJML","Why Owlat built a custom table-based HTML email renderer instead of using MJML, gaining full control over VML, dark mode, and per-client rendering.",{"path":356,"title":357,"description":358},"\u002Fdeveloper\u002Fdecisions\u002F002-convex-backend","ADR-002: Convex as Backend","Why Owlat chose Convex over PostgreSQL and Firebase for real-time reactivity, co-located TypeScript logic, and zero-config scaling.",{"path":360,"title":361,"description":362},"\u002Fdeveloper\u002Fdecisions\u002F003-notion-like-builder","ADR-003: Notion-like Email Builder","Why Owlat replaced the traditional 3-panel email editor with a Notion-like single-column canvas for inline WYSIWYG editing.",{"path":364,"title":365,"description":366},"\u002Fdeveloper\u002Fdecisions\u002F004-monorepo-bun-workspaces","ADR-004: Monorepo with Bun Workspaces","Why Owlat uses a monorepo with Bun workspaces and Turborepo for fast installs, atomic cross-package changes, and cached CI.",{"path":368,"title":369,"description":370},"\u002Fdeveloper\u002Fdecisions\u002F005-custom-mta","ADR-005: Custom MTA","Why Owlat built a custom Mail Transfer Agent instead of relying solely on third-party email providers.",{"path":372,"title":373,"description":374},"\u002Fdeveloper\u002Fdecisions\u002F006-self-hosted-convex","ADR-006: Self-Hosted Convex","Why Owlat uses the open-source Convex backend for self-hosting instead of migrating to a different database.",{"path":376,"title":377,"description":378},"\u002Fdeveloper\u002Fdecisions\u002F007-pluggable-llm","ADR-007: Pluggable LLM Provider","Why Owlat uses the Vercel AI SDK with a provider abstraction layer instead of hardcoding a single LLM vendor.",{"path":380,"title":381,"description":382},"\u002Fdeveloper\u002Fdecisions\u002F008-process-architecture","ADR-008: Agent Process Architecture","Why Owlat processes inbound messages with a self-scheduling step walker plus a lifecycle coordinator instead of one sequential function.",{"path":384,"title":385,"description":386},"\u002Fexamples","Examples","Copy-pasteable integration patterns for common Owlat use cases.",{"path":388,"title":389,"description":390},"\u002Fexamples\u002Fwelcome-email","Welcome Email","Send a personalized welcome email when a new user signs up.",{"path":392,"title":393,"description":394},"\u002Fexamples\u002Fbilling-email","Billing Email","Send a billing receipt with an invoice PDF attached after a successful payment.",{"path":396,"title":397,"description":398},"\u002Fexamples\u002Fevent-automation","Event Automation","Trigger automations with custom events for trial lifecycle, feature adoption, and more.",{"path":400,"title":401,"description":402},"\u002Fexamples\u002Fcontact-sync","Contact Sync","Sync contacts from your database to Owlat using upsert patterns and bulk operations.",{"path":404,"title":405,"description":406},"\u002Fexamples\u002Fwebhook-handler","Webhook Handler","Handle Owlat delivery webhooks with signature verification and event routing.",{"path":408,"title":409,"description":410},"\u002Fexamples\u002Fmultilingual-email","Multilingual Email","Send emails in the recipient's preferred language using template translations.",{"path":412,"title":413,"description":414},"\u002Fvision","Vision","Where Owlat is heading — from email platform to unified communication intelligence powered by AI agents.",{"path":416,"title":417,"description":418},"\u002Fvision\u002Fself-hosting","Self-Hosting Architecture","How Owlat runs as a fully self-hosted stack using Docker Compose — open-source Convex backend, custom MTA, and a pluggable LLM provider.",{"path":420,"title":421,"description":422},"\u002Fvision\u002Fagent-pipeline","Agent Pipeline","Technical architecture for the inbound email agent pipeline — step modules, the walker, security scanning, threading, and human review.",{"path":424,"title":106,"description":425},"\u002Fvision\u002Fknowledge-graph","Technical architecture for Owlat's typed knowledge storage — how organizational knowledge is stored, searched, decayed, and maintained.",{"path":427,"title":428,"description":429},"\u002Fvision\u002Fmulti-channel","Multi-Channel & CRM","Technical architecture for channel adapters, unified messaging, contact identity unification, and the CRM hub.",{"path":431,"title":432,"description":433},"\u002Fvision\u002Ffile-system","Semantic File System","Technical architecture for Owlat's semantic file storage — version tracking with provenance today, plus the planned embedding-based retrieval and auto-tagging layer.",{"path":435,"title":436,"description":437},"\u002Fvision\u002Fdesktop-app","Desktop App & Advanced Agents","Architecture of the Owlat desktop shell, visualization agent, adaptive dashboard, agent health, graduated autonomy, and coding agents.",{"path":439,"title":440,"description":441},"\u002Fvision\u002Froadmap","Roadmap","What's planned next for Owlat — the documented-but-unbuilt pieces still being wired, and the enhancements on our radar.",{"id":443,"title":102,"body":444,"description":103,"extension":1239,"meta":1240,"navigation":1241,"path":101,"seo":1242,"stem":1243,"__hash__":1244},"content\u002F1.guide\u002F30.ai-agent.md",{"type":445,"value":446,"toc":1218},"minimark",[447,455,463,468,475,562,582,602,607,633,646,674,678,689,693,696,719,723,730,734,737,741,744,748,751,770,786,790,799,873,876,880,904,960,985,988,992,1008,1028,1031,1057,1061,1077,1086,1092,1156,1171,1178,1182,1189,1204,1208,1212,1215],[448,449,450,451,454],"p",{},"The AI agent reads every inbound message in your ",[452,453,94],"a",{"href":93},", classifies it by intent, and drafts a suggested reply. With auto-reply enabled, high-confidence drafts can go out without a human ever touching them; everything else lands in the review queue. This page is the admin's guide to turning the agent on and tuning how far you let it run on its own.",[448,456,457,458,462],{},"All of these controls live under ",[459,460,461],"strong",{},"Settings",", are admin-only, and depend on the AI feature flags being enabled.",[464,465,467],"h2",{"id":466},"enabling-the-agent","Enabling the agent",[448,469,470,471,474],{},"The agent is gated behind a small cascade of ",[452,472,473],{"href":69},"feature flags",". Each one requires the one above it, so turning a child on automatically pulls in its parents:",[476,477,478,494],"table",{},[479,480,481],"thead",{},[482,483,484,488,491],"tr",{},[485,486,487],"th",{},"Flag",[485,489,490],{},"Label",[485,492,493],{},"What it unlocks",[495,496,497,520,540],"tbody",{},[482,498,499,506,509],{},[500,501,502],"td",{},[503,504,505],"code",{},"ai",[500,507,508],{},"AI features",[500,510,511,512,515,516,519],{},"Master toggle for everything AI. Requires an LLM provider (",[503,513,514],{},"LLM_PROVIDER",", ",[503,517,518],{},"LLM_API_KEY",").",[482,521,522,527,530],{},[500,523,524],{},[503,525,526],{},"ai.agent",[500,528,529],{},"AI agent (classify + draft)",[500,531,532,533,535,536,539],{},"Classifies inbound mail and drafts replies. Requires ",[503,534,505],{}," and ",[503,537,538],{},"inbox",".",[482,541,542,547,550],{},[500,543,544],{},[503,545,546],{},"ai.autonomy",[500,548,549],{},"Autonomous actions",[500,551,552,553,557,558,535,560,539],{},"Per-category ",[452,554,556],{"href":555},"#graduated-autonomy-rules","autonomy rules",". Requires ",[503,559,505],{},[503,561,526],{},[448,563,564,565,567,568,570,571,573,574,577,578,581],{},"Turning ",[503,566,505],{}," off cascades off every AI feature; turning ",[503,569,526],{}," off also turns off ",[503,572,546],{}," and code tasks. You can flip flags from ",[459,575,576],{},"Settings > Features",", or from the ",[459,579,580],{},"AI Agent"," settings page described below.",[583,584,587],"callout",{"title":585,"type":586},"An LLM provider is required","info",[448,588,589,590,535,592,594,595,597,598,535,600,539],{},"The agent calls a language model for classification and drafting. Set ",[503,591,514],{},[503,593,518],{}," before enabling ",[503,596,505],{}," — see ",[452,599,70],{"href":69},[452,601,333],{"href":332},[603,604,606],"h3",{"id":605},"what-the-agent-does-to-each-message","What the agent does to each message",[448,608,609,610,612,613,616,617,620,621,624,625,628,629,632],{},"When ",[503,611,526],{}," is on, every inbound message runs through a fixed pipeline in this order: the content is ",[459,614,615],{},"security-scanned"," (prompt-injection and spam heuristics), ",[459,618,619],{},"context is assembled"," (contact profile, recent activity, and thread history), the message is ",[459,622,623],{},"classified"," (category, priority, sentiment, intent), a reply is ",[459,626,627],{},"drafted",", and finally the draft is ",[459,630,631],{},"routed"," to either auto-approval or human review. The scan can quarantine likely prompt injections and archive high-scoring spam before the agent ever drafts; messages the classifier marks as spam are archived; complaints and anything marked urgent skip the drafter and go straight to review.",[583,634,636],{"title":635,"type":586},"Context assembly includes the Knowledge Graph",[448,637,638,639,642,643,645],{},"Context assembly draws on the contact profile, recent activity, and thread history, ",[459,640,641],{},"plus"," semantically-retrieved ",[452,644,106],{"href":105}," entries and relevant source files. Knowledge and file retrieval is contact-scoped, so the drafter only sees entries visible for that contact.",[448,647,648,649,515,652,515,655,515,658,515,661,515,664,515,667,670,671,539],{},"The classifier sorts each message into one of eight categories: ",[503,650,651],{},"support",[503,653,654],{},"sales",[503,656,657],{},"billing",[503,659,660],{},"feature_request",[503,662,663],{},"complaint",[503,665,666],{},"spam",[503,668,669],{},"internal",", and ",[503,672,673],{},"other",[464,675,677],{"id":676},"agent-configuration","Agent configuration",[448,679,680,681,684,685,688],{},"Open ",[459,682,683],{},"Settings > AI Agent"," (",[503,686,687],{},"\u002Fdashboard\u002Fsettings\u002Fagent",") to tune how the agent behaves. The page is split into the master toggle, confidence and rate limits, and tone.",[603,690,692],{"id":691},"enable-agent-pipeline-auto-reply","Enable Agent Pipeline & Auto-Reply",[448,694,695],{},"Two switches sit at the top:",[697,698,699,713],"ul",{},[700,701,702,705,706,708,709,539],"li",{},[459,703,704],{},"Enable Agent Pipeline"," mirrors the ",[503,707,526],{}," feature flag. Saving with this on (the first time) kicks off the ",[452,710,712],{"href":711},"#knowledge-backfill","knowledge backfill",[700,714,715,718],{},[459,716,717],{},"Auto-Reply"," lets the agent send replies without human approval when its confidence clears the threshold. With it off, every draft goes to the review queue regardless of confidence.",[603,720,722],{"id":721},"confidence-threshold","Confidence threshold",[448,724,725,726,729],{},"A slider from 0–100%. It's the ",[459,727,728],{},"minimum confidence score"," a draft needs to be auto-approved. Drafts below it route to human review. At 100% nothing is ever auto-approved; at 0% every draft is (subject to the daily cap). The default is 70%.",[603,731,733],{"id":732},"daily-auto-reply-limit","Daily auto-reply limit",[448,735,736],{},"The maximum number of auto-approved replies the agent may send per day. Once the cap is hit, further high-confidence drafts go to the review queue until the count resets. The default is 50.",[603,738,740],{"id":739},"message-coalescing-window","Message coalescing window",[448,742,743],{},"How long (in seconds) the agent waits for additional messages in a thread before it starts processing, so a burst of replies is handled as one. The default is 30 seconds.",[603,745,747],{"id":746},"tone-signature","Tone & signature",[448,749,750],{},"Two free-text fields that shape the drafts:",[697,752,753,764],{},[700,754,755,758,759,763],{},[459,756,757],{},"Tone Description"," — a plain-language description of the voice you want (e.g. ",[760,761,762],"em",{},"\"Professional and friendly. Use the customer's first name. Keep responses concise.\"","). It's injected into the drafting prompt.",[700,765,766,769],{},[459,767,768],{},"Email Signature"," — a signature appended to the end of agent-drafted email replies.",[583,771,773],{"title":772,"type":586},"Replies also go out over SMS, WhatsApp & webhook",[448,774,775,776,779,780,782,783,785],{},"Auto-reply isn't email-only. When a draft is approved (or auto-sent) for a message that arrived over a configured ",[452,777,778],{"href":133},"channel"," — SMS, WhatsApp, or the generic webhook — the agent dispatches the reply through that channel's provider rather than the email pipeline, gated on ",[503,781,526],{}," plus the channel being configured and enabled. (Admins can also send a manual outbound message on these channels from a contact's Unified Timeline.) The ",[459,784,768],{}," is appended to email replies only.",[464,787,789],{"id":788},"agent-health-metrics","Agent health & metrics",[448,791,792,684,795,798],{},[459,793,794],{},"Settings > Agent Health",[503,796,797],{},"\u002Fdashboard\u002Fsettings\u002Fagent-health",") is a live dashboard of how the pipeline is performing. A rollup job recomputes the metrics every five minutes.",[476,800,801,811],{},[479,802,803],{},[482,804,805,808],{},[485,806,807],{},"Metric",[485,809,810],{},"What it shows",[495,812,813,823,833,843,853,863],{},[482,814,815,820],{},[500,816,817],{},[459,818,819],{},"Queue Depth",[500,821,822],{},"Inbound messages waiting to be processed.",[482,824,825,830],{},[500,826,827],{},[459,828,829],{},"Processing",[500,831,832],{},"Messages currently being classified.",[482,834,835,840],{},[500,836,837],{},[459,838,839],{},"Processing Latency",[500,841,842],{},"Average time to process a message over the last window.",[482,844,845,850],{},[500,846,847],{},[459,848,849],{},"Error Rate",[500,851,852],{},"Share of agent actions that failed. Drives the circuit breaker.",[482,854,855,860],{},[500,856,857],{},[459,858,859],{},"Auto-Approve Ratio",[500,861,862],{},"Auto-approved actions vs. total.",[482,864,865,870],{},[500,866,867],{},[459,868,869],{},"LLM Cost",[500,871,872],{},"Real model spend (USD) for the current window.",[448,874,875],{},"The page also charts processing latency, error rate, and queue depth over the last 24 hours.",[464,877,879],{"id":878},"circuit-breakers","Circuit breakers",[448,881,882,883,886,887,890,891,894,895,897,898,900,901,903],{},"The health page shows three circuit breakers, each with a ",[503,884,885],{},"closed"," (healthy), ",[503,888,889],{},"open"," (tripped), or ",[503,892,893],{},"half_open"," (testing recovery) state. The five-minute rollup evaluates all three each run, tripping a breaker ",[503,896,889],{}," when its signal exceeds the threshold and recovering it through ",[503,899,893],{}," back to ",[503,902,885],{}," as the signal subsides.",[476,905,906,919],{},[479,907,908],{},[482,909,910,913,916],{},[485,911,912],{},"Breaker",[485,914,915],{},"Threshold",[485,917,918],{},"Signal",[495,920,921,934,947],{},[482,922,923,928,931],{},[500,924,925],{},[459,926,927],{},"LLM Failure",[500,929,930],{},"20%",[500,932,933],{},"Rolling agent error rate.",[482,935,936,941,944],{},[500,937,938],{},[459,939,940],{},"Confidence Degradation",[500,942,943],{},"30%",[500,945,946],{},"Share of drafts with degraded confidence.",[482,948,949,954,957],{},[500,950,951],{},[459,952,953],{},"Rejection Spike",[500,955,956],{},"40%",[500,958,959],{},"Rolling draft rejection rate.",[583,961,964],{"title":962,"type":963},"Breakers are an automatic kill-switch","warning",[448,965,966,967,970,971,974,975,977,978,980,981,984],{},"Breaker state gates the live auto-reply pipeline. The routing step's first-tier check reads circuit-breaker state and forces ",[459,968,969],{},"every"," draft to human review whenever ",[459,972,973],{},"any"," breaker is ",[503,976,889],{},", regardless of the global ",[459,979,717],{}," switch, ",[459,982,983],{},"Confidence Threshold",", or autonomy rules. Auto-replies resume only once the breakers recover. Treat an open breaker as an active auto-reply kill-switch, not just a health signal.",[448,986,987],{},"Beyond breakers and confidence, a final per-draft safety gate runs before any auto-send: an otherwise-approved draft is downgraded to human review if the inbound prompt-injection guard couldn't run on the message, if the generated draft itself trips an injection pattern, or if the draft contains a credential\u002Fsecret fingerprint. It's a fail-closed check on autonomous sends — when in doubt, a human looks first.",[464,989,991],{"id":990},"graduated-autonomy-rules","Graduated autonomy rules",[448,993,994,684,997,1000,1001,1003,1004,1007],{},[459,995,996],{},"Settings > Graduated Autonomy",[503,998,999],{},"\u002Fdashboard\u002Fsettings\u002Fautonomy",", behind the ",[503,1002,546],{}," flag) lets you set ",[459,1005,1006],{},"per-category"," rules instead of one global threshold. Each rule targets one of the eight classifier categories and carries its own:",[697,1009,1010,1016,1022],{},[700,1011,1012,1015],{},[459,1013,1014],{},"Auto-approve threshold"," — the confidence required to auto-approve actions in that category.",[700,1017,1018,1021],{},[459,1019,1020],{},"Daily auto-action limit"," — a per-category cap on auto-approved actions.",[700,1023,1024,1027],{},[459,1025,1026],{},"Enabled"," toggle.",[448,1029,1030],{},"The page also shows 24-hour feedback stats per category (approved \u002F rejected \u002F edited) and a panel describing the intended behaviour: the agent classifies a message, auto-approves if confidence clears the category threshold and the daily limit isn't reached, and otherwise routes to review. A weekly job is designed to nudge thresholds — tightening a category whose rejection rate climbs past 40%, loosening one with a low rejection rate.",[583,1032,1034],{"title":1033,"type":586},"How autonomy rules interact with the global controls",[448,1035,609,1036,1038,1039,1042,1043,980,1045,670,1047,1049,1050,1053,1054,1056],{},[503,1037,546],{}," is ",[459,1040,1041],{},"enabled",", the routing step consults these per-category rules: a draft is auto-approved only if its confidence clears that category's threshold and the category's daily cap isn't reached, and a category with no rule is never auto-approved. The global ",[459,1044,717],{},[459,1046,983],{},[459,1048,733],{}," on the ",[452,1051,580],{"href":1052},"#agent-configuration"," page are the fallback, used only when ",[503,1055,546],{}," is off.",[464,1058,1060],{"id":1059},"knowledge-backfill","Knowledge backfill",[448,1062,1063,1064,1066,1067,1069,1070,1073,1074,1076],{},"The first time you flip ",[459,1065,704],{}," on (an explicit ",[503,1068,526],{}," off→on toggle), Owlat kicks off a ",[459,1071,1072],{},"one-time scan"," of your existing inbound mail history. It walks past messages through the ",[452,1075,106],{"href":105}," extraction pipeline so your graph is seeded from existing mail rather than starting empty.",[583,1078,1080],{"title":1079,"type":586},"The backfill feeds the drafter",[448,1081,1082,1083,1085],{},"The scan populates the ",[452,1084,106],{"href":105},", which you can browse and search by hand. Those entries also feed the agent's drafting context: the drafter semantically retrieves from the graph during context assembly (subject to contact-scope), so a richer graph means better-grounded drafts.",[448,1087,1088,1089,1091],{},"A progress card appears on the ",[459,1090,580],{}," settings page while a job exists, showing:",[476,1093,1094,1104],{},[479,1095,1096],{},[482,1097,1098,1101],{},[485,1099,1100],{},"Field",[485,1102,1103],{},"Meaning",[495,1105,1106,1116,1126,1136,1146],{},[482,1107,1108,1113],{},[500,1109,1110],{},[459,1111,1112],{},"Status",[500,1114,1115],{},"Queued, Scanning mail history, Complete, Cancelled, or Failed.",[482,1117,1118,1123],{},[500,1119,1120],{},[459,1121,1122],{},"Scanned \u002F total",[500,1124,1125],{},"Progress through your message history (capped for the progress bar).",[482,1127,1128,1133],{},[500,1129,1130],{},[459,1131,1132],{},"Extracted",[500,1134,1135],{},"Messages that produced at least one knowledge entry.",[482,1137,1138,1143],{},[500,1139,1140],{},[459,1141,1142],{},"Skipped",[500,1144,1145],{},"Already-extracted or too-short messages.",[482,1147,1148,1153],{},[500,1149,1150],{},[459,1151,1152],{},"Errors",[500,1154,1155],{},"Messages that errored during extraction.",[448,1157,1158,1159,1162,1163,1166,1167,1170],{},"You can ",[459,1160,1161],{},"Cancel"," a running job; the scan stops cleanly at the next chunk. The backfill is strictly first-run: it runs ",[459,1164,1165],{},"once ever",". Cancelling and re-enabling the toggle does ",[459,1168,1169],{},"not"," start a second scan, and an enable that happens as a cascade side effect (rather than a direct toggle) never triggers it.",[583,1172,1175],{"title":1173,"type":1174},"Re-enabling won't re-scan","tip",[448,1176,1177],{},"If you need the agent off temporarily, toggling it back on later is safe and cheap — there is no repeated history scan. The backfill only ever runs on the very first activation.",[464,1179,1181],{"id":1180},"visualization-agent-adaptive-dashboards","Visualization agent & adaptive dashboards",[448,1183,1184,1185,1188],{},"Behind the ",[503,1186,1187],{},"ai.visualizations"," flag, Owlat ships a small visualization agent: you describe a chart or dashboard in natural language and the agent generates a self-contained, sandboxed HTML visualization you can pin to your dashboard. Pinned visualizations and a configurable card layout make up the adaptive dashboard.",[448,1190,1191,1192,1195,1196,1199,1200,1203],{},"By default a chart uses clearly-labelled ",[459,1193,1194],{},"illustrative sample data"," — free-form prompts are never routed to your real numbers, so it's a safe layout-and-design tool. To chart real account numbers, opt in explicitly with the ",[459,1197,1198],{},"dataset picker",", which exposes a fixed allowlist of four read-only datasets: email delivery (last 30 days), agent health, contact growth, and campaign performance. A chart built on a live dataset carries a ",[459,1201,1202],{},"Live data"," badge and can be refreshed on demand to pull current numbers; illustrative charts have no dataset and cannot be refreshed.",[464,1205,1207],{"id":1206},"where-to-go-next","Where to go next",[1209,1210],"link-card",{"description":1211,"title":94,"to":93},"See where drafts land, work the review queue, and approve or edit agent replies.",[1209,1213],{"description":1214,"title":106,"to":105},"The context store the agent draws on, and what the backfill seeds it with.",[1209,1216],{"description":1217,"title":70,"to":69},"Turn the AI flags on or off and wire up your LLM provider.",{"title":1219,"searchDepth":1220,"depth":1220,"links":1221},"",2,[1222,1226,1233,1234,1235,1236,1237,1238],{"id":466,"depth":1220,"text":467,"children":1223},[1224],{"id":605,"depth":1225,"text":606},3,{"id":676,"depth":1220,"text":677,"children":1227},[1228,1229,1230,1231,1232],{"id":691,"depth":1225,"text":692},{"id":721,"depth":1225,"text":722},{"id":732,"depth":1225,"text":733},{"id":739,"depth":1225,"text":740},{"id":746,"depth":1225,"text":747},{"id":788,"depth":1220,"text":789},{"id":878,"depth":1220,"text":879},{"id":990,"depth":1220,"text":991},{"id":1059,"depth":1220,"text":1060},{"id":1180,"depth":1220,"text":1181},{"id":1206,"depth":1220,"text":1207},"md",{},true,{"title":102,"description":103},"1.guide\u002F30.ai-agent","qLp2g0ka77LR1zBxiixb4r-BWdTg2nIJodeEo6qgr2A",[1246,1248],{"title":98,"path":97,"stem":1247,"children":-1},"1.guide\u002F3.email-editor",{"title":106,"path":105,"stem":1249,"children":-1},"1.guide\u002F31.knowledge-graph",1782846430746]