Files
nexa/docs/02-roadmap.md
T
Claude e8f0d9a2c2 Memory retention design + open-question re-asker + UNAS Pro specifics
Two design questions answered:

1. Web/news/Karakeep INTO long-term memory? Yes, but with per-source TTL.
   docs/08 gains a "Memory sources & retention" section that pins TTLs:
   memo/obsidian/karakeep = permanent, mail = 365d, mail_digest = 90d,
   rss = 30d, web_search = 90d, system = 30d. Every Qdrant point carries
   payload.expires_at; a daily prune workflow honours it. New commands
   in docs/05: #nexa:learn --permanent, #nexa:forget, #nexa:retain,
   #nexa:ask --web (SearXNG → crawl4ai-mcp → markitdown-mcp → embed).
   Phase 2.4 added to roadmap.

2. Re-ask unanswered open questions. Backoff schedule (3d → 7d → 21d →
   60d) tracked in GraphDB per question. Surface ONE question per day
   in the morning digest, but only when the digest is otherwise short
   (capacity guard < 800 chars). User reply parsed → question auto-
   resolved → docs/11 diff proposed (Phase 6.4 hook). New commands in
   docs/05: #nexa:digest, #nexa:remind, #nexa:answered. Phase 5.3 added.

UNAS Pro details from the UniFi Drive dashboard:
- It's a Ubiquiti UNAS Pro (UniFi Drive 4.1.16 on UniFi OS 5.0.17),
  SFP+, RAID 6, 19.96 TiB raw, 2.05 TiB used. Recorded in CLAUDE.md.
- SMB native paths: smb://192.168.1.31/<share> (mac) / \\192.168.1.31\
  <share> (win). UniFi recommends SMB as the modern path — matches our
  decision to default Nexa volumes to SMB.
- ⚠️ Storage-pool snapshots NOT configured ("Click to Setup"). Added as
  optimization #38: highest-leverage data-protection change in the
  homelab right now. Daily + weekly UniFi Drive snapshot, native, no
  agent. RAID 6 doesn't protect against rm -rf or accidental mass-
  delete; snapshots do.
- #39: Nexa workflows that mutate large state can use the same native
  snapshots for fast rollback (pre-snapshot → operate → verify).
2026-05-05 04:45:29 +00:00

5.1 KiB
Raw Blame History

02 — Roadmap & Phases

Iterative build-out, value-first. Each phase is shippable on its own.

Phase 1 — The Spine (connectivity)

Focus: datapath between Memos, n8n and SAIA. Milestone: Nexa replies on Memos and answers simple questions.

  • 1.1 Memos ↔ n8n bridge — webhook ingress, content filter, comment-back.
  • 1.2 SAIA integration — call LiteLLM proxy from n8n; chat via Memos comments.
  • 1.3 Git-sync — periodic export of n8n workflows into this repo.

Phase 2 — Senses (input channels)

Focus: e-mail filter and the Work-vs-Personal router. Milestone: Nexa distinguishes work tasks from personal tasks without manual tags.

  • 2.1 Email butler — filter & summarize the ~20 daily personal mails.
  • 2.2 RSS morning digest — curated daily summary in Memos. Items also enter nexa_knowledge_text with source_type=rss, ttl=30d (see 08 § Memory sources & retention).
  • 2.3 Bluesky antenna — store liked posts as knowledge snippets.
  • 2.4 On-demand web fetch#nexa:ask --web runs a SearXNG query through redis-searxng, fetches top hits via crawl4ai-mcp + markitdown-mcp, embeds and answers. Pages stay in memory with ttl=90d so the next related question doesn't re-fetch.

Phase 3 — Memory (Qdrant & RAG)

Focus: Qdrant + graph layer for retrieval-augmented answers. Milestone: RAG works — Nexa answers from archived notes; images captured today are queued for visual indexing later.

  • 3.1 Text RAG (Path A) — TEI + bge-m3, single Qdrant collection nexa_knowledge_text. #nexa:ask reads it before answering. Image attachments are recorded as nexa:Note with pendingVisualIndex but not embedded yet.
  • 3.2 Visual collection (Path C) — swap TEI → infinity, add jina-clip-v2, create nexa_knowledge_visual, backfill all queued image notes. RAG workflow gets a parallel branch for visual hits. See 09 § "Phase add-on: visual collection".
  • 3.3 S3 long-term archive — Qdrant snapshots (both collections) to the S3 server.
  • 3.4 Ontotext GraphDB — SPARQL pillar; structural queries combined with vector hits in #nexa:ask. See 08.

Phase 4 — Motor (organization & action)

Focus: calendar integration and time-boxing. Milestone: Nexa proactively proposes morning focus slots in the work calendar.

  • 4.1 Nextcloud Tasks sync — bidirectional status sync (Memos ↔ NC Tasks).
  • 4.2 Time-boxing agent — calendar-aware slot suggestions.
  • 4.3 Karakeep curation — automated review cycle for saved links.

Phase 5 — Daily integration (polish)

Focus: Home Assistant Voice and monitoring. Milestone: Nexa speaks via HA-Voice and surfaces critical system states proactively.

  • 5.1 HA Voice — Wake-word integration, Wyoming protocol.
  • 5.2 System monitoring — Proxmox / Backrest alerts into the Memos system feed via ntfy.
  • 5.3 Morning digest with self-asking re-loop — daily 07:00 digest aggregates mail + tasks + drift report. When the digest has spare capacity, Nexa re-asks ONE open question from docs/11 using a backoff schedule (3 d → 7 d → 21 d → 60 d). Answers parsed from the user's reply auto-resolve the question and emit a docs/11 diff for review (Phase 6.4 hook). See docs/05 § #nexa:digest.

Phase 6 — Nexa as homelab steward

Focus: Nexa actively maintains the homelab inventory instead of being told manually. Milestone: Nexa runs a daily drift report — what changed, what's stale, what's missing — and turns it into actionable comments under a pinned [STEWARD] memo.

  • 6.1 Inventory sync — Nexa polls Arcane / docker ps / Proxmox API on a schedule and stores the running-state snapshot in GraphDB (nexa:Service, nexa:LastSeen, nexa:DataPath, …).
  • 6.2 Drift detection — diff against the documented desired state in this repo (docs/12, CLAUDE.md, the housekeeping campaign at #3537). Emit findings as structured Memos comments: "open-webui last used 38 d ago — retire?", "Container foo has no services/foo/ bind — schedule UNAS migration?".
  • 6.3 Steward commands#nexa:retire <svc> (tar to backup/, stop, archive the stack), #nexa:document <svc> (template a CLAUDE.md entry), #nexa:wishlist-status (which entries in docs/13 are still needed).
  • 6.4 Self-update of docs — when the user resolves an open question via Memos, Nexa proposes the corresponding edit to docs/11-open-questions.md as a PR-ready diff (the doc itself becomes a Nexa-managed surface).

This phase is what turns Nexa from "an assistant that answers questions" into "an assistant that takes care of its own runtime", and it's the natural home for the cross-cutting housekeeping campaign — most of those items become semi-automatic once 6.16.3 ship.