Roadmap
What's planned next for Owlat — the documented-but-unbuilt pieces still being wired, and the enhancements on our radar.
Roadmap
This is a living view of where Owlat is going next. It has two parts:
- 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.
- 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.
Priorities run P0 (highest) to P3; effort is a rough S / M / L / XL. Nothing here is a commitment or a date — it's a direction.
The bulk of Owlat is built. See The Future of Owlat for the full picture of what ships today, and Feature Flags for the toggles that turn each surface on. This page is deliberately about the parts that are not done.
Being wired (documented but not yet complete)
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.
| Area | Planned capability | What ships today |
|---|---|---|
| Campaigns / security | Pre-send content and URL-reputation scanning for campaigns — a blocked or suspicious score moves the campaign to Pending review. | Content scanning runs on transactional publish and on inbound mail; URL-reputation runs on inbound mail. Campaign sends are not yet gated by the scanner. |
| Team Inbox | Inbound rejection of blocklisted senders. | Block Sender adds the address to the suppression/blocklist and archives the current message; future inbound mail from that address is still accepted (not auto-rejected on receipt). |
| Knowledge Graph | LLM-inferred relationship edges (ai.knowledge.autoLink), graph-augmented retrieval (ai.knowledge.graphRetrieval), and the knowledge-graph analytics dashboard (ai.knowledge.analytics). | A deterministic 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. |
| Ask-anything | Cross-source, LLM-synthesized answers with citations spanning the knowledge graph and the file store. | 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. |
| Files | Auto-capture of agent-generated output, and auto-linking captured attachments to the sender contact + thread. | 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. |
| Autonomy | A value-threshold human-review gate (requiresHumanAbove) and a ground-truth classification-accuracy signal. | Per-category auto-approve thresholds and daily caps ship; requiresHumanAbove is referenced only in vision text. classification_accuracy is populated as a mean self-reported-confidence proxy, not a human-labelled ground truth. |
| Providers | Alternative notification providers (desktop / webPush) and alternative vector stores (pinecone / qdrant / pgvector). | NOTIFICATION_PROVIDER and VECTOR_STORE are declared but inert; Convex's built-in vector index is the only retrieval backend, and there is no notification dispatch. |
| Channels | A second SMS provider (Vonage). | The SMS adapter is Twilio-only; WhatsApp (Meta) and a generic webhook channel also ship. |
| MTA | ARC sealing (Authenticated Received Chain). | DKIM key management + rotation, MTA-STS, and TLS-RPT ship; ARC sealing is intentionally not implemented. |
| Setup CLI | owlat-setup env --show to list which variables a deployment needs for its current flag state. | owlat-setup env <KEY> <VALUE> sets a variable; there is no --show listing yet. |
On the radar
Ideas we'd like to build, grouped by area. Each builds directly on something Owlat already runs.
Email, campaigns & deliverability
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Per-recipient send-time optimization | Predict each contact's best send hour from their own open history (no extra send volume). | L | P1 |
| Behavioral & date-based automation triggers | Start automations on opened / clicked / didn't-open, N-days-inactive, or anniversaries — re-engagement and lifecycle journeys. | L | P1 |
| List-hygiene / sunset policy | Auto-suppress chronically unengaged contacts after a final re-engagement attempt, protecting sender reputation proactively. | M | P1 |
| Pre-send inbox-readiness lint | Run the rendered campaign through client-compat + deliverability checks (unsubscribe, text part, spam-word, link/image ratio) before send. | M | P1 |
| Richer A/B testing | From-name / preheader / send-time variants, more than two variants, and a significance-based auto-winner. | M | P2 |
| AI subject-line & preheader assistant | Generate and score subject/preheader candidates in the composer and load the top two as A/B variants. | M | P2 |
| Seed-list inbox-placement testing | Send a campaign to operator-owned seed accounts and report inbox-vs-spam placement per provider. | L | P2 |
AI, agents & autonomy
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Agent eval harness | A golden set of past messages + accepted outcomes to score classify/draft quality before changing models, prompts, or thresholds. | L | P1 |
| Learn-from-edits draft memory | Capture reviewer edits as per-category few-shot examples so the drafter converges on each team's house style. | M | P1 |
| Agent actions beyond drafting | Let the agent propose tag / assign / set-property / create-task / snooze actions through the same verification queue and autonomy gating as replies. | XL | P1 |
| Groundedness guardrail + citations | Attribute draft claims to retrieved sources and downgrade ungrounded auto-sends to human review. | L | P1 |
| Per-category / per-task model routing | A settings UI mapping tasks/categories to model IDs over the env defaults, with per-route cost estimates. | M | P2 |
| Custom tool / MCP registration for the assistant | Let operators register MCP servers or declarative HTTP tools the @assistant may call. | L | P2 |
| Thread summarization + daily agent digest | On-thread TL;DRs plus a daily email summarizing auto-sends, the review backlog, and category trends. | M | P2 |
Inbox, collaboration & CRM
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Internal notes & @mentions on inbox threads | Private collaboration on a customer conversation, reusing the chat mention infrastructure. | M | P1 |
| Contact 360 side-panel in the inbox | Surface properties, topics, lifecycle status, and a condensed activity timeline next to the thread. | M | P1 |
| Snooze & follow-up reminders for team-inbox threads | Bring the proven Postbox snooze model to shared-inbox threads so nothing waiting-on-customer slips. | S | P1 |
| Saved-reply / snippet library | Reusable human-authored replies the agent can also draw on for routine answers. | M | P2 |
| Thread tags/labels + saved views | Free-form labels and saved filters so multi-function teams can carve the shared queue into lanes. | M | P2 |
| Automated relationship intelligence | Derive engagement metrics and propose relationships (same domain, reply graph) from existing activity data. | L | P2 |
| Calendar & scheduling | Book-a-meeting links + ICS in email, reusing forms/public-route/transactional patterns. | XL | P3 |
Self-hosting, ops & admin
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Off-box backup targets | Push backups to S3 / Backblaze B2 / any rclone remote with retention, so a host loss doesn't take the backups with it. | M | P1 |
| Proactive health alerting | A cron that pages the owner (email / webhook / chat) when deployment health degrades, instead of waiting for someone to open the System screen. | M | P1 |
| Pre-update snapshot + auto-rollback | The updater takes its own backup before promoting and rolls back automatically if the new version fails to reach healthy. | L | P1 |
Prometheus /metrics exporter | Expose queue depth, delivery/bounce rates, LLM spend, and agent metrics so Owlat folds into an existing monitoring stack. | M | P2 |
| Scheduled secret rotation | An owner-facing rotation surface covering infra secrets, app API keys, and DKIM rollover, with audit history. | M | P2 |
| In-app guided restore + restore-drill | A one-screen restore flow plus an optional periodic drill that proves backups are actually restorable. | L | P2 |
| Disk-space guardrails + support bundle | Warn before the convex-data volume fills (the most common outage) and capture a one-command diagnostics bundle. | M | P3 |
Integrations, API & ecosystem
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Broaden the public v1 REST API + SDKs | Add campaigns, segments, automations, and forms resources (with matching scopes) so external systems can drive more than contacts/events/transactional/topics. | L | P1 |
| Expand the outbound webhook event catalog | Add form.submitted, contact.updated/deleted, topic/automation/campaign lifecycle, and inbox.message.received events. | M | P1 |
| More import providers | HubSpot, Klaviyo, Brevo, and a generic CSV-from-URL importer on the existing provider registry. | M | P1 |
| First-party n8n node + Zapier/Make app | No-code automation for the self-hosting teams who already run n8n next to their stack. | L | P1 |
| OAuth2 third-party app authorization | One-click, revocable, least-privilege grants instead of pasted API keys. | L | P2 |
| Native MCP server | Expose Owlat's REST + knowledge/inbox read access as MCP tools to external AI clients. | M | P2 |
| SDK webhook-verification helpers | webhooks.verify(...) + typed event payloads in the JS and Java SDKs. | S | P2 |
Knowledge graph, files & data intelligence
| Idea | What it unlocks | Effort | Priority |
|---|---|---|---|
| Interactive node-link graph explorer | A visual view of entries and their typed relationships (supports / contradicts / supersedes / relates_to), expandable from a contact, entry, or search hit. | M | P1 |
| Unified semantic search | Extend global search across knowledge entries, files, contacts, and messages with an optional vector leg. | L | P1 |
| Real semantic file search in the Files UI | Wire the action-based vector search into the Files page and index AI summaries, tags, and extracted text. | M | P1 |
| Auto-capture inbound attachments & agent outputs | Persist received attachments (and agent-generated files) into the library, contact- and thread-linked. | M | P1 |
| Knowledge-graph analytics dashboard | Implement ai.knowledge.analytics: centrality, clusters, contradictions, orphans, and per-contact coverage. | L | P2 |
| Scheduled email digests & reports | Opt-in weekly/monthly "your week in Owlat" summaries sent through the platform's own MTA. | M | P2 |
| Workspace data export & portability | Portable archives of knowledge, files, and analytics — beyond today's contacts-only CSV export. | L | P2 |
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.