MemoDocumentation
EN

Memo Roadmap

This is a living snapshot of what's actively planned past the current
release, not a commitment to dates or a final feature list. Items move,
get reshaped, or get dropped as real usage informs them. See
versinNote/ for what's actually shipped in each past
release, and the repo's BUG_REPORT.md for open bugs/design gaps found in
live testing.

Updated 2026-11-07 for v5.0.0: the shipped list now runs to v5.0 and a new section lists what is built but not yet proven. Earlier note: updated for v4.5.0 (this doc previously described a roadmap for
"past v4.4.0" — the desktop mascot and Code Mode's Plan/Auto/Build
sub-modes have since shipped. The items below reflect what's actually
next, not what was next a release ago.)

Shipped this cycle (v4.0.0 → v5.0), for context

  • v4.0.0 — real time-awareness in the system prompt ("how long since
    the last message"), WhatsApp third-party conversation takeover.
  • v4.3.0 — Live Mode v2: native audio-to-audio voice (Google Live /
    OpenAI Realtime), delegate/standalone modes, barge-in, ElevenLabs +
    custom engines; Telegram added as a second messaging bridge.
  • v4.4.0 — the Self-Driving task loop: Task.md schema,
    planner/executor mode with plan approval, sub-agent orchestration
    (coder + parallel analyzer/reviewer/test-runner), live in-chat task
    activity, escalation/retry/provider-lock hardening, real tool-calling
    for the Claude and Gemini providers (previously entirely missing), a
    new Anthropic-compatible custom provider type, an OpenAI-compatible
    Developer Gateway sibling, and an experimental "gemini-sub" provider
    (sign in with a personal Google account, Beta — removed in v4.6.0 in
    favour of Subscriptions).
  • v4.5.0 — the desktop mascot: a second, always-on-top
    window (same process) that reflects Memo's live activity across every
    channel, with two selectable skins and idle animation; Code Mode split
    into three cycled sub-modes (Plan/Auto/Build) with per-mode system
    prompts and auto-permission chaining into Build; both Developer
    Gateway endpoints (Anthropic- and OpenAI-compatible) now key-enforced
    for non-loopback callers; imported skills no longer auto-activate;
    clearer Live Mode failure messages and a fixed HuggingFace avatar
    404 spam in the Model Store.
  • v4.6.0 — Memo can open desktop apps (open_app) and
    drive an isolated Chromium tab shown live in a panel next to the chat,
    which you can use by hand too; long replies are ended by silence, not a
    fixed 300 s, with a live progress line and heartbeat; Subscriptions
    (Antigravity / Claude / Codex through the bundled CLIProxyAPI sidecar)
    replaces gemini-sub/claude-sub, with a new model-picker panel,
    per-model remaining-allowance badges, a usage-limit card that continues
    by itself, and image generation/editing; one Flutter app for Android and
    iOS (the standalone mobile/ client is retired); a rebuilt Memory tab
    (see, edit, selectively delete); prompt-cache accounting in Usage Stats;
    the Cline provider and a cost-organized Add Provider; skills active per
    chat; an internal security audit (admin-gated destructive routes,
    file:// refused in the browser, incognito honoured on chat-addressed
    sends); the AppImage published to R2 on the same stable/beta channels as
    the tar.gz.
  • v4.7.0 — Memo updates itself from inside the app (signed manifests,
    byte-exact resumable downloads, an in-place swap with automatic rollback)
    and the local engines (llama.cpp, whisper.cpp, the Subscriptions
    connector) can be refreshed without a new Memo; ChatGPT and claude.ai
    through a real browser window (Beta); a leaner Code Mode and cheaper
    repeated turns.
  • v5.0.0 (2026-11-07) — Mail and the Digital Twin (Gmail,
    Outlook or any IMAP account; a 3-layer Gatekeeper, an injection shield, an
    outgoing secret scan; one timeline per person across mail and WhatsApp;
    replies in your own style; approval from the app, WhatsApp or Telegram with
    an undo window; a follow-up radar), the daily briefing (sections, custom
    items, Telegram / WhatsApp / mail delivery, an optional briefing model), the
    setup wizard v2, Projects (.memo/, project-scoped memory, project
    skills and permissions), one chat list with a Chat | Agent start screen, the
    streamed agent loop, chat sub-agents, skills called by name, faster
    local models (engine chosen by the GPU Memo really sees, Vulkan prompt
    processing, n-gram speculative decoding) and the anonymous daily
    summary
    (on by default in official builds). Release notes:
    versinNote/v5.0.0.md.

Open after v5.0 — what is built but not yet proven

Written from the plans' own "not verified" lists, not from wishes:

  • Device acceptance of the Digital Twin — the 25-item checklist in
    DIGITAL_TWIN_DEVICE_ACCEPTANCE.md is
    still unticked: approving from WhatsApp and Telegram (#onay / #iptal),
    voice messages, .ics invitations as real attachments.
  • The daily briefing live — a real delivery to Telegram, WhatsApp
    ("message yourself") and mail, and a briefing written by a real provider,
    have only unit and widget tests behind them. The setup wizard and the
    briefing panel have not been checked by eye.
  • Project permissions have no screen — .memo/permissions.json is
    approved through Memo's local API today.
  • Mail accounts are not in backups or cloud sync — restoring on another
    machine means connecting mail again.
  • Plain-text meeting requests ("can we meet tomorrow at 3?") are not added
    to the calendar; only .ics invitations are.
  • A slow safety-review model can hold an ordinary mail
    (review_unavailable) or make an automatic reply fall back to a draft.
  • Dead configuration — autonomy.briefing.* in config.yaml is never
    read; the real settings live in twin.db.
  • Telemetry server deployment must be verified before an official release.
  • Windows and macOS — the in-app update hand-off, engine updates and the
    faster-local-model work are verified on Linux only; the rest is built and
    tested in CI.

Near-term — items from live testing

These were found running the Self-Driving loop against real tasks, not
hypothetical. Status update (v4.6.0): BUG-PLAN9, 11 and 12 are implemented
(the pinned task-activity card above the composer with inline plan approval,
one canonical progress line, incremental plan-item marking), and the
get_task_status/pause_task/resume_task tools are now also described in
Code Mode's prompt. BUG-THINK1 is partly addressed — Claude's thinking blocks
are now replayed across the agent tool loop — but feeding the existing
"thinking" UI was not re-verified. The original descriptions are kept below
as history:

  • BUG-PLAN9 — a ready plan can only be approved from the Tasks tab,
    not inline in the chat that launched it.
  • BUG-PLAN10 — logged when the chat model had no tool to read a
    running task's real status and fabricated a confident, wrong "it's
    broken" narrative instead. A get_task_status tool + anti-fabrication
    prompt was added afterward (def5ac1c) that looks like the fix, but it
    hasn't been live-verified yet — worth confirming with a real "how's the
    task going" before treating this as closed.
  • BUG-PLAN11 — a plan's step count can grow via escalation (a stuck
    step splits into sub-steps); different screens compute progress
    differently and show different item/step numbers for the same list.
  • BUG-PLAN12 — a task's live activity (step started/done, sub-agent
    turn, escalation) only shows in the Tasks tab, not as a lightweight
    stream in the chat that launched it.
  • BUG-THINK1 — Claude's extended thinking is requested (spends real
    tokens) whenever an effort level is picked, but the response's
    "thinking" content block is parsed nowhere in the backend — the
    frontend already has a full collapsible "thinking" UI, it's just never
    fed. Medium priority (doesn't break anything, just wastes a paid-for
    feature for users who opted into effort levels).

Mobile

Done (2026-09-26): there is one Flutter client. The separate mobile/
project is retired; frontend/ now has android/ and ios/ targets and is
what ships to a phone, so feature parity is structural rather than something
to audit. Both targets are built in CI (build-android.yml,
build-ios.yml) — Android as an APK (signed on release), iOS unsigned, since this project
has no macOS or iOS hardware and no signing certificates.

What that leaves open:

  • On-device verification — CI proves the targets compile and link,
    nothing more. Unproven on real hardware: first-run mic permission,
    record's WAV path on Android, notification delivery and its survival
    across a reboot, just_audio playback plus voice-mode barge-in, the
    Android save/share dialog, the back button, keyboard insets, and the
    narrow layout as a whole. iOS needs a Mac and an iPhone, neither of which
    this setup has.
  • Store publishing — Play Console / App Store accounts and the final
    store bundle identifier are still open. CI already publishes a signed
    APK (memo.apk) and an unsigned IPA (memo.ipa, sideload
    only) to data.memocpp.com on every release.
  • Live Mode's native realtime engines on mobile — live_pcm_player.dart
    streams PCM into a long-lived sink and is Linux-only (it already threw on
    macOS and Windows before mobile existed). Phones fall back to the discrete
    transcribe/synthesize loop instead.
  • Reminders for events added out of band — an event the LLM adds while
    the calendar tab was never opened is not armed until it is. Closing that
    needs a real event stream, not a poller.

Platform Reach

  • arm64 Docker image — done: the image is multi-arch (amd64 + arm64), published by build-docker.yml.
  • Official CasaOS App Store listing.
  • Real-hardware verification — the ARM build and Docker image have
    only ever been verified in CI/sandboxes, never on an actual Raspberry
    Pi or NAS.
  • Package manager distribution (nice-to-have) — Homebrew tap,
    winget/Chocolatey.

Memo Swarm

internal/swarm/ — distributed inference across multiple machines,
currently Beta. Maturing it needs to start from actual usage friction
(the host/join flow, room codes) rather than a guessed feature list.

Computer Use (not yet scheduled)

The user's own framing: a Claude-Code-computer-use-like system that can
directly drive the keyboard/mouse. Deliberately last in line — the
biggest, riskiest item on any list here:

  • The current agent (internal/agent/) is sandboxed to files/commands
    with a danger-level permission system; keyboard/mouse control is a
    completely different security surface (access to everything on screen).
  • Needs a per-platform implementation (Linux X11/Wayland, Windows, macOS
    Accessibility API) — ongoing maintenance, not a one-time build.
  • Needs its own, likely stricter permission model (per-action
    confirmation, a persistent "Memo is in control" indicator).
  • Planned as its own release, after the rest of the 4.x line settles and
    real user feedback on the Self-Driving loop comes in.

Backlog, not yet sequenced

  • Structural cleanup: handlers_flutter.go and memory/store.go are
    both large, area-based-split candidates.
  • Account-scoped data isolation for self-hosted multi-user (each data
    layer would need an account_id — a deep change, not started).

Source document