[{"data":1,"prerenderedAt":1474},["ShallowReactive",2],{"search":3,"content-vision\u002Froadmap":442,"surround-\u002Fvision\u002Froadmap":1470},[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":440,"body":444,"description":441,"extension":1464,"meta":1465,"navigation":1466,"path":439,"seo":1467,"stem":1468,"__hash__":1469},"content\u002F5.vision\u002F7.roadmap.md",{"type":445,"value":446,"toc":1450},"minimark",[447,451,455,472,487,508,513,516,773,776,779,784,892,896,1001,1005,1106,1110,1214,1218,1337,1341,1444],[448,449,440],"h1",{"id":450},"roadmap",[452,453,454],"p",{},"This is a living view of where Owlat is going next. It has two parts:",[456,457,458,466],"ol",{},[459,460,461,465],"li",{},[462,463,464],"strong",{},"Being wired"," — capabilities the product already references or scaffolds, but that are not fully implemented yet. These are honest gaps; the rest of the docs are written to match what actually ships today, and the unbuilt pieces are tracked here.",[459,467,468,471],{},[462,469,470],{},"On the radar"," — enhancements we think would make Owlat materially more useful. Each is grounded in something Owlat already does, so it is an extension rather than a rewrite.",[452,473,474,475,478,479,482,483,486],{},"Priorities run ",[462,476,477],{},"P0"," (highest) to ",[462,480,481],{},"P3","; effort is a rough ",[462,484,485],{},"S \u002F M \u002F L \u002F XL",". Nothing here is a commitment or a date — it's a direction.",[488,489,492],"callout",{"title":490,"type":491},"What already exists","info",[452,493,494,495,499,500,503,504,507],{},"The bulk of Owlat is built. See ",[496,497,498],"a",{"href":412},"The Future of Owlat"," for the full picture of what ships today, and ",[496,501,502],{"href":69},"Feature Flags"," for the toggles that turn each surface on. This page is deliberately about the parts that are ",[462,505,506],{},"not"," done.",[509,510,512],"h2",{"id":511},"being-wired-documented-but-not-yet-complete","Being wired (documented but not yet complete)",[452,514,515],{},"These are referenced in the product, the schema, or a feature flag, but are not fully implemented. Where a doc page used to imply one of these was finished, we've corrected it — and listed it here instead.",[517,518,519,535],"table",{},[520,521,522],"thead",{},[523,524,525,529,532],"tr",{},[526,527,528],"th",{},"Area",[526,530,531],{},"Planned capability",[526,533,534],{},"What ships today",[536,537,538,567,582,618,639,655,684,724,738,752],"tbody",{},[523,539,540,544,556],{},[541,542,543],"td",{},"Campaigns \u002F security",[541,545,546,547,550,551,555],{},"Pre-send ",[462,548,549],{},"content and URL-reputation scanning for campaigns"," — a blocked or suspicious score moves the campaign to ",[552,553,554],"em",{},"Pending review",".",[541,557,558,559,562,563,566],{},"Content scanning runs on ",[462,560,561],{},"transactional"," publish and on ",[462,564,565],{},"inbound"," mail; URL-reputation runs on inbound mail. Campaign sends are not yet gated by the scanner.",[523,568,569,571,576],{},[541,570,94],{},[541,572,573],{},[462,574,575],{},"Inbound rejection of blocklisted senders.",[541,577,578,581],{},[552,579,580],{},"Block Sender"," adds the address to the suppression\u002Fblocklist and archives the current message; future inbound mail from that address is still accepted (not auto-rejected on receipt).",[523,583,584,586,611],{},[541,585,106],{},[541,587,588,591,592,596,597,591,600,603,604,591,607,610],{},[462,589,590],{},"LLM-inferred relationship edges"," (",[593,594,595],"code",{},"ai.knowledge.autoLink","), ",[462,598,599],{},"graph-augmented retrieval",[593,601,602],{},"ai.knowledge.graphRetrieval","), and the ",[462,605,606],{},"knowledge-graph analytics dashboard",[593,608,609],{},"ai.knowledge.analytics",").",[541,612,613,614,617],{},"A deterministic ",[593,615,616],{},"relates_to"," structural linker runs after extraction, and retrieval is hybrid vector + full-text with reciprocal-rank fusion. The three flags exist as scaffolding; the LLM edge inference, graph-expansion retrieval, and analytics dashboard behind them are unbuilt.",[523,619,620,623,633],{},[541,621,622],{},"Ask-anything",[541,624,625,628,629,632],{},[462,626,627],{},"Cross-source, LLM-synthesized answers with citations"," spanning the knowledge graph ",[552,630,631],{},"and"," the file store.",[541,634,635,638],{},[593,636,637],{},"quickQuery.ask"," runs a full-text keyword search over knowledge-graph entries only and returns the matching entries' content with their titles as sources — no file-store search, no vector retrieval, no LLM synthesis.",[523,640,641,643,652],{},[541,642,110],{},[541,644,645,648,649,555],{},[462,646,647],{},"Auto-capture of agent-generated output",", and ",[462,650,651],{},"auto-linking captured attachments to the sender contact + thread",[541,653,654],{},"Inbound email attachments are auto-captured into the library on delivery (org-general, with the source Message-ID as provenance). Agent output is not auto-captured, and captured attachments are not yet linked to a contact or thread.",[523,656,657,660,674],{},[541,658,659],{},"Autonomy",[541,661,662,663,591,666,669,670,673],{},"A ",[462,664,665],{},"value-threshold human-review gate",[593,667,668],{},"requiresHumanAbove",") and a ",[462,671,672],{},"ground-truth classification-accuracy"," signal.",[541,675,676,677,679,680,683],{},"Per-category auto-approve thresholds and daily caps ship; ",[593,678,668],{}," is referenced only in vision text. ",[593,681,682],{},"classification_accuracy"," is populated as a mean self-reported-confidence proxy, not a human-labelled ground truth.",[523,685,686,688,714],{},[541,687,258],{},[541,689,690,691,591,694,697,698,701,702,591,705,697,708,697,711,610],{},"Alternative ",[462,692,693],{},"notification providers",[593,695,696],{},"desktop"," \u002F ",[593,699,700],{},"webPush",") and alternative ",[462,703,704],{},"vector stores",[593,706,707],{},"pinecone",[593,709,710],{},"qdrant",[593,712,713],{},"pgvector",[541,715,716,719,720,723],{},[593,717,718],{},"NOTIFICATION_PROVIDER"," and ",[593,721,722],{},"VECTOR_STORE"," are declared but inert; Convex's built-in vector index is the only retrieval backend, and there is no notification dispatch.",[523,725,726,729,735],{},[541,727,728],{},"Channels",[541,730,731,732,555],{},"A second ",[462,733,734],{},"SMS provider (Vonage)",[541,736,737],{},"The SMS adapter is Twilio-only; WhatsApp (Meta) and a generic webhook channel also ship.",[523,739,740,743,749],{},[541,741,742],{},"MTA",[541,744,745,748],{},[462,746,747],{},"ARC sealing"," (Authenticated Received Chain).",[541,750,751],{},"DKIM key management + rotation, MTA-STS, and TLS-RPT ship; ARC sealing is intentionally not implemented.",[523,753,754,757,763],{},[541,755,756],{},"Setup CLI",[541,758,759,762],{},[593,760,761],{},"owlat-setup env --show"," to list which variables a deployment needs for its current flag state.",[541,764,765,768,769,772],{},[593,766,767],{},"owlat-setup env \u003CKEY> \u003CVALUE>"," sets a variable; there is no ",[593,770,771],{},"--show"," listing yet.",[509,774,470],{"id":775},"on-the-radar",[452,777,778],{},"Ideas we'd like to build, grouped by area. Each builds directly on something Owlat already runs.",[780,781,783],"h3",{"id":782},"email-campaigns-deliverability","Email, campaigns & deliverability",[517,785,786,802],{},[520,787,788],{},[523,789,790,793,796,799],{},[526,791,792],{},"Idea",[526,794,795],{},"What it unlocks",[526,797,798],{},"Effort",[526,800,801],{},"Priority",[536,803,804,818,830,843,855,868,880],{},[523,805,806,809,812,815],{},[541,807,808],{},"Per-recipient send-time optimization",[541,810,811],{},"Predict each contact's best send hour from their own open history (no extra send volume).",[541,813,814],{},"L",[541,816,817],{},"P1",[523,819,820,823,826,828],{},[541,821,822],{},"Behavioral & date-based automation triggers",[541,824,825],{},"Start automations on opened \u002F clicked \u002F didn't-open, N-days-inactive, or anniversaries — re-engagement and lifecycle journeys.",[541,827,814],{},[541,829,817],{},[523,831,832,835,838,841],{},[541,833,834],{},"List-hygiene \u002F sunset policy",[541,836,837],{},"Auto-suppress chronically unengaged contacts after a final re-engagement attempt, protecting sender reputation proactively.",[541,839,840],{},"M",[541,842,817],{},[523,844,845,848,851,853],{},[541,846,847],{},"Pre-send inbox-readiness lint",[541,849,850],{},"Run the rendered campaign through client-compat + deliverability checks (unsubscribe, text part, spam-word, link\u002Fimage ratio) before send.",[541,852,840],{},[541,854,817],{},[523,856,857,860,863,865],{},[541,858,859],{},"Richer A\u002FB testing",[541,861,862],{},"From-name \u002F preheader \u002F send-time variants, more than two variants, and a significance-based auto-winner.",[541,864,840],{},[541,866,867],{},"P2",[523,869,870,873,876,878],{},[541,871,872],{},"AI subject-line & preheader assistant",[541,874,875],{},"Generate and score subject\u002Fpreheader candidates in the composer and load the top two as A\u002FB variants.",[541,877,840],{},[541,879,867],{},[523,881,882,885,888,890],{},[541,883,884],{},"Seed-list inbox-placement testing",[541,886,887],{},"Send a campaign to operator-owned seed accounts and report inbox-vs-spam placement per provider.",[541,889,814],{},[541,891,867],{},[780,893,895],{"id":894},"ai-agents-autonomy","AI, agents & autonomy",[517,897,898,910],{},[520,899,900],{},[523,901,902,904,906,908],{},[526,903,792],{},[526,905,795],{},[526,907,798],{},[526,909,801],{},[536,911,912,924,936,949,961,973,989],{},[523,913,914,917,920,922],{},[541,915,916],{},"Agent eval harness",[541,918,919],{},"A golden set of past messages + accepted outcomes to score classify\u002Fdraft quality before changing models, prompts, or thresholds.",[541,921,814],{},[541,923,817],{},[523,925,926,929,932,934],{},[541,927,928],{},"Learn-from-edits draft memory",[541,930,931],{},"Capture reviewer edits as per-category few-shot examples so the drafter converges on each team's house style.",[541,933,840],{},[541,935,817],{},[523,937,938,941,944,947],{},[541,939,940],{},"Agent actions beyond drafting",[541,942,943],{},"Let the agent propose tag \u002F assign \u002F set-property \u002F create-task \u002F snooze actions through the same verification queue and autonomy gating as replies.",[541,945,946],{},"XL",[541,948,817],{},[523,950,951,954,957,959],{},[541,952,953],{},"Groundedness guardrail + citations",[541,955,956],{},"Attribute draft claims to retrieved sources and downgrade ungrounded auto-sends to human review.",[541,958,814],{},[541,960,817],{},[523,962,963,966,969,971],{},[541,964,965],{},"Per-category \u002F per-task model routing",[541,967,968],{},"A settings UI mapping tasks\u002Fcategories to model IDs over the env defaults, with per-route cost estimates.",[541,970,840],{},[541,972,867],{},[523,974,975,978,985,987],{},[541,976,977],{},"Custom tool \u002F MCP registration for the assistant",[541,979,980,981,984],{},"Let operators register MCP servers or declarative HTTP tools the ",[593,982,983],{},"@assistant"," may call.",[541,986,814],{},[541,988,867],{},[523,990,991,994,997,999],{},[541,992,993],{},"Thread summarization + daily agent digest",[541,995,996],{},"On-thread TL;DRs plus a daily email summarizing auto-sends, the review backlog, and category trends.",[541,998,840],{},[541,1000,867],{},[780,1002,1004],{"id":1003},"inbox-collaboration-crm","Inbox, collaboration & CRM",[517,1006,1007,1019],{},[520,1008,1009],{},[523,1010,1011,1013,1015,1017],{},[526,1012,792],{},[526,1014,795],{},[526,1016,798],{},[526,1018,801],{},[536,1020,1021,1033,1045,1058,1070,1082,1094],{},[523,1022,1023,1026,1029,1031],{},[541,1024,1025],{},"Internal notes & @mentions on inbox threads",[541,1027,1028],{},"Private collaboration on a customer conversation, reusing the chat mention infrastructure.",[541,1030,840],{},[541,1032,817],{},[523,1034,1035,1038,1041,1043],{},[541,1036,1037],{},"Contact 360 side-panel in the inbox",[541,1039,1040],{},"Surface properties, topics, lifecycle status, and a condensed activity timeline next to the thread.",[541,1042,840],{},[541,1044,817],{},[523,1046,1047,1050,1053,1056],{},[541,1048,1049],{},"Snooze & follow-up reminders for team-inbox threads",[541,1051,1052],{},"Bring the proven Postbox snooze model to shared-inbox threads so nothing waiting-on-customer slips.",[541,1054,1055],{},"S",[541,1057,817],{},[523,1059,1060,1063,1066,1068],{},[541,1061,1062],{},"Saved-reply \u002F snippet library",[541,1064,1065],{},"Reusable human-authored replies the agent can also draw on for routine answers.",[541,1067,840],{},[541,1069,867],{},[523,1071,1072,1075,1078,1080],{},[541,1073,1074],{},"Thread tags\u002Flabels + saved views",[541,1076,1077],{},"Free-form labels and saved filters so multi-function teams can carve the shared queue into lanes.",[541,1079,840],{},[541,1081,867],{},[523,1083,1084,1087,1090,1092],{},[541,1085,1086],{},"Automated relationship intelligence",[541,1088,1089],{},"Derive engagement metrics and propose relationships (same domain, reply graph) from existing activity data.",[541,1091,814],{},[541,1093,867],{},[523,1095,1096,1099,1102,1104],{},[541,1097,1098],{},"Calendar & scheduling",[541,1100,1101],{},"Book-a-meeting links + ICS in email, reusing forms\u002Fpublic-route\u002Ftransactional patterns.",[541,1103,946],{},[541,1105,481],{},[780,1107,1109],{"id":1108},"self-hosting-ops-admin","Self-hosting, ops & admin",[517,1111,1112,1124],{},[520,1113,1114],{},[523,1115,1116,1118,1120,1122],{},[526,1117,792],{},[526,1119,795],{},[526,1121,798],{},[526,1123,801],{},[536,1125,1126,1138,1150,1162,1178,1190,1202],{},[523,1127,1128,1131,1134,1136],{},[541,1129,1130],{},"Off-box backup targets",[541,1132,1133],{},"Push backups to S3 \u002F Backblaze B2 \u002F any rclone remote with retention, so a host loss doesn't take the backups with it.",[541,1135,840],{},[541,1137,817],{},[523,1139,1140,1143,1146,1148],{},[541,1141,1142],{},"Proactive health alerting",[541,1144,1145],{},"A cron that pages the owner (email \u002F webhook \u002F chat) when deployment health degrades, instead of waiting for someone to open the System screen.",[541,1147,840],{},[541,1149,817],{},[523,1151,1152,1155,1158,1160],{},[541,1153,1154],{},"Pre-update snapshot + auto-rollback",[541,1156,1157],{},"The updater takes its own backup before promoting and rolls back automatically if the new version fails to reach healthy.",[541,1159,814],{},[541,1161,817],{},[523,1163,1164,1171,1174,1176],{},[541,1165,1166,1167,1170],{},"Prometheus ",[593,1168,1169],{},"\u002Fmetrics"," exporter",[541,1172,1173],{},"Expose queue depth, delivery\u002Fbounce rates, LLM spend, and agent metrics so Owlat folds into an existing monitoring stack.",[541,1175,840],{},[541,1177,867],{},[523,1179,1180,1183,1186,1188],{},[541,1181,1182],{},"Scheduled secret rotation",[541,1184,1185],{},"An owner-facing rotation surface covering infra secrets, app API keys, and DKIM rollover, with audit history.",[541,1187,840],{},[541,1189,867],{},[523,1191,1192,1195,1198,1200],{},[541,1193,1194],{},"In-app guided restore + restore-drill",[541,1196,1197],{},"A one-screen restore flow plus an optional periodic drill that proves backups are actually restorable.",[541,1199,814],{},[541,1201,867],{},[523,1203,1204,1207,1210,1212],{},[541,1205,1206],{},"Disk-space guardrails + support bundle",[541,1208,1209],{},"Warn before the convex-data volume fills (the most common outage) and capture a one-command diagnostics bundle.",[541,1211,840],{},[541,1213,481],{},[780,1215,1217],{"id":1216},"integrations-api-ecosystem","Integrations, API & ecosystem",[517,1219,1220,1232],{},[520,1221,1222],{},[523,1223,1224,1226,1228,1230],{},[526,1225,792],{},[526,1227,795],{},[526,1229,798],{},[526,1231,801],{},[536,1233,1234,1246,1274,1286,1298,1310,1322],{},[523,1235,1236,1239,1242,1244],{},[541,1237,1238],{},"Broaden the public v1 REST API + SDKs",[541,1240,1241],{},"Add campaigns, segments, automations, and forms resources (with matching scopes) so external systems can drive more than contacts\u002Fevents\u002Ftransactional\u002Ftopics.",[541,1243,814],{},[541,1245,817],{},[523,1247,1248,1251,1270,1272],{},[541,1249,1250],{},"Expand the outbound webhook event catalog",[541,1252,1253,1254,1257,1258,1261,1262,1265,1266,1269],{},"Add ",[593,1255,1256],{},"form.submitted",", ",[593,1259,1260],{},"contact.updated","\u002F",[593,1263,1264],{},"deleted",", topic\u002Fautomation\u002Fcampaign lifecycle, and ",[593,1267,1268],{},"inbox.message.received"," events.",[541,1271,840],{},[541,1273,817],{},[523,1275,1276,1279,1282,1284],{},[541,1277,1278],{},"More import providers",[541,1280,1281],{},"HubSpot, Klaviyo, Brevo, and a generic CSV-from-URL importer on the existing provider registry.",[541,1283,840],{},[541,1285,817],{},[523,1287,1288,1291,1294,1296],{},[541,1289,1290],{},"First-party n8n node + Zapier\u002FMake app",[541,1292,1293],{},"No-code automation for the self-hosting teams who already run n8n next to their stack.",[541,1295,814],{},[541,1297,817],{},[523,1299,1300,1303,1306,1308],{},[541,1301,1302],{},"OAuth2 third-party app authorization",[541,1304,1305],{},"One-click, revocable, least-privilege grants instead of pasted API keys.",[541,1307,814],{},[541,1309,867],{},[523,1311,1312,1315,1318,1320],{},[541,1313,1314],{},"Native MCP server",[541,1316,1317],{},"Expose Owlat's REST + knowledge\u002Finbox read access as MCP tools to external AI clients.",[541,1319,840],{},[541,1321,867],{},[523,1323,1324,1327,1333,1335],{},[541,1325,1326],{},"SDK webhook-verification helpers",[541,1328,1329,1332],{},[593,1330,1331],{},"webhooks.verify(...)"," + typed event payloads in the JS and Java SDKs.",[541,1334,1055],{},[541,1336,867],{},[780,1338,1340],{"id":1339},"knowledge-graph-files-data-intelligence","Knowledge graph, files & data intelligence",[517,1342,1343,1355],{},[520,1344,1345],{},[523,1346,1347,1349,1351,1353],{},[526,1348,792],{},[526,1350,795],{},[526,1352,798],{},[526,1354,801],{},[536,1356,1357,1369,1381,1393,1405,1420,1432],{},[523,1358,1359,1362,1365,1367],{},[541,1360,1361],{},"Interactive node-link graph explorer",[541,1363,1364],{},"A visual view of entries and their typed relationships (supports \u002F contradicts \u002F supersedes \u002F relates_to), expandable from a contact, entry, or search hit.",[541,1366,840],{},[541,1368,817],{},[523,1370,1371,1374,1377,1379],{},[541,1372,1373],{},"Unified semantic search",[541,1375,1376],{},"Extend global search across knowledge entries, files, contacts, and messages with an optional vector leg.",[541,1378,814],{},[541,1380,817],{},[523,1382,1383,1386,1389,1391],{},[541,1384,1385],{},"Real semantic file search in the Files UI",[541,1387,1388],{},"Wire the action-based vector search into the Files page and index AI summaries, tags, and extracted text.",[541,1390,840],{},[541,1392,817],{},[523,1394,1395,1398,1401,1403],{},[541,1396,1397],{},"Auto-capture inbound attachments & agent outputs",[541,1399,1400],{},"Persist received attachments (and agent-generated files) into the library, contact- and thread-linked.",[541,1402,840],{},[541,1404,817],{},[523,1406,1407,1410,1416,1418],{},[541,1408,1409],{},"Knowledge-graph analytics dashboard",[541,1411,1412,1413,1415],{},"Implement ",[593,1414,609],{},": centrality, clusters, contradictions, orphans, and per-contact coverage.",[541,1417,814],{},[541,1419,867],{},[523,1421,1422,1425,1428,1430],{},[541,1423,1424],{},"Scheduled email digests & reports",[541,1426,1427],{},"Opt-in weekly\u002Fmonthly \"your week in Owlat\" summaries sent through the platform's own MTA.",[541,1429,840],{},[541,1431,867],{},[523,1433,1434,1437,1440,1442],{},[541,1435,1436],{},"Workspace data export & portability",[541,1438,1439],{},"Portable archives of knowledge, files, and analytics — beyond today's contacts-only CSV export.",[541,1441,814],{},[541,1443,867],{},[488,1445,1447],{"title":1446,"type":491},"Have a request?",[452,1448,1449],{},"Owlat is open source. If something here matters to you — or something useful is missing — open an issue or a discussion on the repository. The roadmap follows what self-hosting teams actually need.",{"title":1451,"searchDepth":1452,"depth":1452,"links":1453},"",2,[1454,1455],{"id":511,"depth":1452,"text":512},{"id":775,"depth":1452,"text":470,"children":1456},[1457,1459,1460,1461,1462,1463],{"id":782,"depth":1458,"text":783},3,{"id":894,"depth":1458,"text":895},{"id":1003,"depth":1458,"text":1004},{"id":1108,"depth":1458,"text":1109},{"id":1216,"depth":1458,"text":1217},{"id":1339,"depth":1458,"text":1340},"md",{},true,{"title":440,"description":441},"5.vision\u002F7.roadmap","3LF6yP-KUhyTEB7ayiTODJJpKtnZoumSTEdXmhXIAD8",[1471,1473],{"title":436,"path":435,"stem":1472,"children":-1},"5.vision\u002F6.desktop-app",null,1782846425071]