Roadmap
nanoMuse is an open-source personal agent for every device you own. This page is a map for people who want to help: what we are working on now, what comes after, and where to put your hands first in each area. No dates — a thing ships when it works on a real phone and a real computer.
The 0.1 versions are a preview. We use the phone, the desktop, the web and the relay every day and know where they are rough; the list below is honest about it. What does not change: one agent rather than a framework, an approval between it and anything irreversible, secrets that never reach the model, memory you can read and edit, any OpenAI-compatible model, free software.
Now — catching up with Muse
Meta's Muse set the shape of this kind of agent; these are the places where ours is still behind it, and the first task in each.
Memory
The agent keeps SOUL.md, USER.md, MEMORY.md and HEARTBEAT.md and a remember tool; consolidation runs, recall is embeddings over the store. What is missing: memory that surfaces on its own at the right moment, forgetting that you can see, and the same memory on every device rather than per device.
- Module:
nanomuse/memory/(store.py,consolidate.py,embeddings.py); the phone'sio.github.nanomuse.sysfiles; the desktop's profile panel Memory. - Read: desktop-muse.md (the Memory page), android.md.
- First task: a test in
tests/test_memory_recall.pyfor a fact the agent should bring up unprompted in a later conversation, then make it pass.
Proactivity
Goals are checked on a schedule, routines run with the app closed, the feed is written each morning. What is missing: the agent noticing things between schedules — a mail that arrived (nanomuse/triggers/mail.py is the first trigger), a calendar entry coming up, a device that came online — and deciding whether it is worth a word.
- Module:
nanomuse/goals/,nanomuse/triggers/,nanomuse/nudges.py; the phone'sio.github.nanomuse.feedandgoals. - Read: every-device.md for how a nudge reaches the device you are holding.
- First task: a second trigger next to
mail.py(calendar is the obvious one) with the same interface, and the feed entry it produces.
The conversation
The chat is where everything happens, and it still feels like a chat client. Presence — the face reacting while the agent works, the status line in words — is uneven between the clients; voice is input only since the calls were removed in 0.1.22 (calls.md), and a voice that answers is an open question; the live stage (harness/dsh-nanomuse/src/client/LiveStage.tsx, Android HandsStage.kt) shows the hands but not yet what the agent is thinking in a way a person can follow.
- Module:
harness/dsh-nanomuse/src/client/(AvatarChat.tsx,LiveStage.tsx,Capsule.tsx), Androidio.github.nanomuse.chatandhands, iOSNanoMuseChatCards.swift,NanoMuseComposer.swift. - Read: desktop-muse.md, parity.md — the open items between the clients.
- First task: pick one row of
parity.mdthat is open on a client you can run, and close it.
Hands that succeed more often
The screen as a hand works on Android and on the desktop (the desktop operator is a port of UI-TARS-desktop's). It fails on grounding — the model names the wrong element — and on recovery after an unexpected dialog, and we have no fixed set of tasks to measure it against.
- Module:
nanomuse/computer/(operator.py,coords.py,screen.py),nanomuse/phone/(operator.py,trace.py),harness/desktop/src/operator.ts, Androidio.github.nanomuse.hands. - Read: gui.md for the operator's contract, troubleshooting.md.
- First task: record one failed run with
nanomuse/phone/trace.py, write down the step where it went wrong, and open an issue with the trace. Ten of those become the evaluation set.
Self-hosting in one command
scripts/self-host.sh brings up the relay with TLS; the web runtime has its own docker-compose.yml. What is missing: one command for both, updates that keep the data, and a page that says how much it costs to run for a family.
- Module:
cloud/(docker-compose.yml,docker-compose.local.yml,Dockerfile),scripts/self-host.sh, the rootdocker-compose.yml. - Read: self-hosting.md, cloud.md, deployment.md.
- First task: run
bash scripts/self-host.sh --localon a clean machine and report every place the instructions were wrong.
Internationalisation
The apps are in English and Chinese; the Android app carries fifteen more locales from upstream, and our strings in them (nm_strings.xml) have had far less attention than the English and Chinese. The READMEs are in ten languages.
- Module:
android/src/android/app/src/main/res/values-*/nm_strings.xml,android/src/ios/Localizable.xcstrings,harness/dsh-nanomuse/src/client/locales.ts, the relay's console undercloud/nanomuse_cloud/. - Read: the Every string in every language section of CONTRIBUTING.md.
- First task: open the app in a language you speak, note every string that reads wrong, and fix the file for that locale.
Next
- An open evaluation suite. The hands' failures above, turned into a fixed set of phone and computer tasks anyone can run, with the simulated phone from the showcase (showcase.md,
demo/mobilegym/) as the harness. A number per release, not an impression. - A hands model of our own, on open data. The traces people choose to contribute (Data controls, privacy.md) are the training set; the evaluation suite is the yardstick. Small, open weights, good at Chinese apps.
- Shareable skills. A skill is a folder today (
nanomuse/skills/); it should be something you can hand to a friend, install from a link, and trust because its risk is declared. - More devices as hands. A browser extension so the agent can act in your signed-in browser; a watch for the shortest front door; the car and the home as places the agent can see and act. Each is a new client of the hub (hub.md), not a new agent.
Later — looking up
- The physical world. The hub frames already carry look, act and ask; a robot arm or a camera is one more device. We do not know yet what a personal agent should be allowed to do with a body.
- An agent that lasts years. Memory that grows for a decade without becoming noise; a face and a name that stay yours through model changes; an export you could move to another runtime.
- Legible personal data. Everything the agent knows about you readable as plain files, understood by other programs too, so the agent is a view onto your data rather than the owner of it.
Where the code is
Two trees. android/ is a modified copy of OpenMinis 1.13 pulled in with git subtree; our Android code is in io.github.nanomuse.*, our iOS code in android/src/ios/NanoMuse/ (CONTRIBUTING.md says how to work there). nanomuse/, harness/, cloud/, web/ are ours end to end: the Python runtime that gives the desktop and the web their hands, the desktop app as a DeepSeek Harness plugin, the relay, the web console. architecture.md draws the whole thing; AGENTS.md is the one-screen version with the check commands.
Past releases
Every version is a GitHub release built from its tag, titled nanoMuse <version> · <Codename>; the notes for each are in releases/ and the line-by-line record is the CHANGELOG.
| Version | Codename | In one line |
|---|---|---|
| 0.1.1 – 0.1.11 | Foundation … Hatch | OpenMinis as nanoMuse: the name and face, one home conversation, approvals with scope, memory files, the feed, the avatar studio, the dragon |
| 0.1.12 Hands · 0.1.15 Stage | The phone's screen as a hand, and the stage that shows it working | |
| 0.1.13 Reach | The phone drives your computer (replaced by the hub in 0.1.24) | |
| 0.1.17 – 0.1.18 Doorstep · Open | nanoMuse Cloud: start without a key, sign-up open to everyone | |
| 0.1.19 Ensemble | Every device: the desktop app, the runtime on the hub, nanoMuse Web | |
| 0.1.20 – 0.1.25 | Presence … Mirror | The account first, a voice, invitations, phone-number sign-in, one look on every device |
| 0.1.26 – 0.1.30 | Window … Rooms | The showcase; the desktop moves to DeepSeek Harness and takes Muse's shape and rooms |
| 0.1.31 Locks | The audit's open points closed: no token in any URL, remote control by consent | |
| 0.1.32 – 0.1.35 | Union … Accord | The iPhone and the desktop catch up with the phone, screen for screen |
| 0.1.36 – 0.1.38 | Thread · Weave · Loom | One conversation across the devices, the main one first; the desktop's hands ported from UI-TARS-desktop, with a helper app for the Mac's permissions; a docs site and self-hosting in one command |
| 0.1.39 | Keys | One provider catalogue with what each key covers, on every client and the relay; a ChatGPT plan as a sign-in; each account sees its own conversations on a shared device; the hands' clicks land on Ubuntu, the Mac helper keeps its grants, the iPhone no longer crashes after onboarding; every language complete; the Terminal edition dropped |
| 0.2.0 | Beta | The first beta, when the list under Now is short |