nanoMuse 1.0.7 · Logbook
🐉 nanoMuse 1.0.7 “Logbook”: two days after Beacon, the relay keeps the record of every conversation with the account's models, screenshots included, and the apps add the turns they ran on a key of your own, so your devices share one history whichever of them, and whichever key, answered; the drawn face's clips travel between devices; nanoMuse Cloud answers the nanoMuse apps only; the operator's console is rebuilt around what the model endpoint is doing; and Data controls on every app says what is held and deletes it with one tap.
1.0.6 went out on 2026-10-23. Since then twenty-seven pull requests were merged, and this version is the fourth look at the whole project, with one change at its centre: the record. From relay 0.29 nanoMuse Cloud keeps each chat turn it answered, in full: the request as it sent it to the model (the system prompt with your memory and SOUL, every message, what tools returned, the screenshots of a screen operation) and the answer as the model gave it; the pictures are stored once each as files named by their hash, so a screenshot an app resends on every step is one file. It is the account's own data: your devices read it back, the person running the relay can see a problem whole, nobody else can, and one tap under Data controls removes all of it. The 1.0.7 apps take part from both sides: each chat call names the device and the conversation it belongs to, and a turn answered on a key of your own goes up afterwards with its pictures, never the key or the address, so the record is whole wherever the model was (#579, #591). Around it, three more things the account does: the face's clips travel with the face, so a look drawn and animated on one device is worn and moves on the others without a second rendering job; each device says in its hello which provider and model answer its chats (the two ids, nothing else), so the Devices list and the operator's Platforms page can say what people run; and the models answer the nanoMuse apps only (relay 0.28): a pool worker, an SDK or a script on an account key is turned away with 403 client_not_supported and a sentence pointing to a key of its own, while every app of 1.0.6 and earlier goes on unchanged (#570, #573). The operator's console at /app/admin is a new application, in 简体中文 and English, with a Live page that reads the provider gate every three seconds and pages for platforms, retention, screen operation and data quality; the relay writes one row per chat call saying how it went, never what was said, and its heavy pages read on a second connection off the requests' path, so a month of the ledger costs the operator the wait and nobody else anything. The rest is the kind of thing a check finds: the runtime names itself on every model call, treats a remote MCP server as sending data out, asks before telling a coding agent what to do, keeps a webhook's key out of the transcript and shares connector addresses without their secrets; the desktop keeps a failed push's lines for the next one; the phone stops the account's work before signing out; the iPhone keeps a second account's profile and files apart from the first. Beside the check, @mongo027 made a thinking model's reasoning show while it thinks (#484); @cutey-none added Parallel as a web search provider (#566) and fixed the desktop settings' tint (#569); @Mola-maker let one scheduled task fire at several times a day (#558); @hobostay made the desktop check who stops or approves a remote task (#567); @z1010223zero-pixel fixed a skill's file list under a dotted path and a provider switch that sent the previous provider's key (#572, #581); @Yicheng-Mark made the runtime's own calls skip the environment's proxy, its console print on a non-UTF-8 code page and a write across drives report as the write it was (#587, #594, #595, #596); @takiAA bounded the relay's history page scans and took the counter writes off the event loop (#589, #590); @aiapienthusiast added Cheaper Inference to the catalogue (#554); @Longfellow1 gave the goals' evidence evaluation a fixed offline benchmark (#585). Nothing moves for a person upgrading: the Android package installs over 1.0.6 and keeps everything, the desktop keeps its settings, and a 1.0.6 client works against the relay (0.30.0); what is new is what the account keeps, and the privacy policy and Data controls say so in the same words.
Highlights
- The record: every conversation, on every device, whichever key answered. nanoMuse Cloud keeps each chat turn it answered since relay 0.29, in full, with the pictures as files named by their SHA-256 (
MEDIA_DIR, next to the database); a stream that broke off is kept aspartialwith the reason (client_gone,upstream_timeout,broken, or what a 1.0.7 app says of its own turn). It is written after the answer has left and never fails a chat, and it does not depend on Help improve, which now decides only what joins the training set. The 1.0.7 apps name the device and conversation on each chat call (X-NanoMuse-Device,X-NanoMuse-Conversation), send up the turns they ran on a key of your own (PUT /v1/blobs/{sha256}for the pictures, thenPOST /v1/turns; the key and the base URL never leave the device; the avatar studio's and the quick test's calls are not chat turns and stay out) and read the record back (GET /v1/turns,GET /v1/blobs/{sha256}, a file opening only for an account that holds a reference to it). Data controls on Android, the iPhone, the desktop and the web shows what is held (turns, those on your own keys, files, how long this relay keeps a turn), and its one delete removes the record and the training turns together and reports both. One account may send upRECORD_UPLOADS_PER_MINUTE(120) turns and files a minute and holdMEDIA_ACCOUNT_MAX_MB(2048) of files;RECORD_KEEP_DAYSsweeps older turns on a relay that wants that,MEDIA_MAX_GB(50) bounds the files, least recently used first, andRECORD_TURNS=0keeps none of it (#579, #591). - The face's clips travel with the face, and each device says what answers it. A clip drawn on one device is put up and named in the profile's
clips({mood: {sha256, mime, bytes}}); another device takes it in instead of rendering its own, so a face is animated once per account, and the hourly trim spares the clips the profile names. Each device's hub hello carriesdevice.llm {provider, model}:cloudwhile the account's models answer, else the catalogue's vendor id and the model id, never a key, a base URL or a setting; the relay keeps the two ids on the device row, the Platforms page shows which providers people configure for themselves, and the privacy policy says so. - nanoMuse Cloud answers the nanoMuse apps only. A sixth switch on the operator's Controls, nanoMuse clients only, is on by default: a chat request on an account key from software that is not one of the apps, the desktop app, the Python runtime or the web console (a pool worker, an SDK, a script, the unbranded upstream app) is answered
403 client_not_supported, the client's name in the body and a sentence pointing to a key of one's own. Members are answered from anything; sign-in, the account page, sync and the hub do not look at it; a refusal costs nothing and is one line on the account's timeline. The relay reads theUser-Agent, so this stops honest programs and not impostors; the Non-app traffic page lists what was turned away, by family. The runtime names itself on every model call now (User-Agent: nanoMuse/<version>), where before only one vendor got the name and everyone else saw the OpenAI SDK's string; no app of 1.0.6 or earlier is affected (#573). - The operator's console is rebuilt, and the relay reads off the requests' path.
/app/adminis a small React application (cloud/console, built into the relay package and checked by CI), in 简体中文 and English, with every filter and open account in the address bar. Live reads the provider gate every three seconds: slots in use and requests waiting, each request under way with its phase and age, the last hour by minute, latency percentiles, a verdict on the last ten minutes. Usage is a day × model matrix; Platforms, Retention, Screen operation, Data quality and Non-app traffic answer questions the old console could not. Behind them the relay writes one row per chat call (how long it waited for a slot, time to the first token, how it ended, tools offered and called by name, whether it operated a screen, the platform; never a word of the conversation;CALLS_KEEP_DAYS, 90) and a shape row beside each kept training turn. The console's pages, the analytics and the backfills go through a second, read-only connection in a thread; the Platforms page is computed in SQL; the counter writes are off the event loop, by @takiAA (#590), and older history pages are read through the index instead of rescanning newer rows, by @takiAA (#589). The hub counts frames in bytes, refuses a call id still in flight, and closes a socket past 60 a minute from one address or 32 per account with4008before any key is checked; the events timeline is keptEVENTS_KEEP_DAYS(365); deleting an account leaves no trace in other accounts' invite records; text-message codes go to mainland numbers only on both Aliyun services and the sign-in screen says so wherever it is opened; signing out of the web console takes the account's chats out of the browser's storage (#570, #582, #583). - The runtime, in detail. A thinking model's reasoning shows while it thinks, in the console and the web console's bubble, not only after the answer, by @mongo027 (#484); Parallel's Search MCP answers web searches, with or without a key, by @cutey-none (#566, #517); Cheaper Inference is in the own-key catalogue, by @aiapienthusiast (#554); a skill's files are listed when its folder sits under a dotted path, and switching providers with the key field left empty no longer sends the previous provider's key, both by @z1010223zero-pixel (#572, #581); a call to the runtime's own server never goes through the environment's proxy, the CLI prints its report on a console whose code page is not UTF-8, and a write into an extra root on another drive is reported as the write it was, all by @Yicheng-Mark (#587, #594, #595). The Sentinel treats a tool of a remote MCP server as egress to that host, and a handshake or a call that stalls is given up after
connect_timeout_sandcall_timeout_s; telling a coding agent what to do is a sensitive step, and stopping one stops its helpers; a webhook's key is no longer written into the chat; a connector URL's query, user:password and fragment stay on the device when the profile is shared; a device with remote control off answersinfowith its name and system and nothing more; the hub client waits for the calls in flight before it closes, cancels the inbound calls of a connection that went, and waits a whole minute after a refusal; a mailbox's high-water mark is filed under a hash and a busy look skips no mail; a tap, drag or click is checked against the picture andNaNis refused; a trigger for a device can be made and tested from the app; and the Sentinel's risk levels say what a step does, withstrictasking before a search or a remembered fact. The goals' evidence evaluation has a fixed offline benchmark, by @Longfellow1 (#585). - The desktop. A device on the hub can no longer stop a task or decide an approval card belonging to another device, by @hobostay (#567); the settings pages are tinted only while a search is typed, by @cutey-none (#569, #568). The Gemini key travels in a header instead of the address; Data controls live on their own page and say what the relay keeps; on a Mac an action waits for the capsule to move out of the way; a failed push keeps its lines for the next one and a push the relay refused as too large goes up in halves; the status line says what an MCP or connector tool does in its own words; the capsule and glow windows carry a Content-Security-Policy. The desktop takes part in the record: its chat requests name the device, a turn on a key of your own goes up afterwards with its pictures (
src/record.ts), its hello names what answers new chats, and a clip drawn here is put up for the other devices. - Android. One scheduled task can fire at several times a day, by @Mola-maker (#558, #557); a chats backup can leave the files out, so a package a server refused at 1.5 GB is a few MB, and
nanomuse-backup runmakes one from the shell, so a scheduled task can keep the phone backed up (#561, #560); the Feed shows a day's newest batch first (#555); signing out cancels and awaits a face being drawn, clips being rendered and a run of the hands before the account's data is put aside; a hub frame past the limit is not parsed; the feed's dates are formatted thread-safely; 简体中文 and 繁體中文 use the app's own words throughout (服务商 / 服務商, 形象, 审批). The phone takes part in the record as the desktop does (OwnTurns), with Data controls showing the figures and the one delete reporting both. - The iPhone. The Feed shows a day's newest batch first (#555); the phone takes part in the record (
NanoMuseCloudHeaders.swift,NanoMuseOwnTurns.swift), with the wording in all nine languages; a pull or a push answered after the phone moved to another account no longer writes the first account's name, face and connections over the second's; the Library lists the workspaces of the chats the person can see, not every session folder, and the avatar studio's candidates, the routine wakes and the hub's conversation map are put aside and brought back with the account; the footer under Sync conversations says who can read the text, andPrivacyInfo.xcprivacydeclares what the app sends to nanoMuse Cloud; 简体中文 and 繁體中文 name Hands as Android does; fifty-one of upstream's strings that had a Spanish translation only read in all nine languages (#592). - The project. The privacy policy, in both languages, describes the record, the per-call rows, the shape rows beside training turns, and what the hub keeps about each device, the two model ids included (#598); a Contributors workflow keeps the ten READMEs' contributors current every night; the READMEs' News notes the two-thousandth star and the first place on Trending; the hosted relay keeps fourteen days of database copies (#597); the test suite reads the iOS project and the avatar sources as UTF-8 on every platform, by @Yicheng-Mark (#596); the container images carry the OCI
licensesandsourcelabels. - TestFlight. Build 29 (1.0.6) was uploaded on 2026-10-24 and went to the internal testers; 1.0.7 goes up as build 30, and that is the build submitted to Apple's beta review. A build reaches the public link once its review has passed, the internal testers before that.
Upgrade Notes
- Android installs over 1.0.6 and keeps your data.
nanoMuse-1.0.7-arm64.apk(Android 8.0+, arm64; versionCode 50) is signed with the same key as every version before it. Verify withsha256sum -c nanoMuse-1.0.7-arm64.apk.sha256. Nothing to set: Settings → Data controls now shows what nanoMuse Cloud holds of the account and the one delete removes it; a turn you run on a key of your own joins the record from this version on. - iPhone and iPad come through TestFlight. Build 30 (1.0.7) is submitted when it is uploaded and reaches the public link once its review has passed, the internal testers before that; until then the link installs the newest build that passed.
- The desktop installers are built by CI from the tag
v1.0.7. The Mac packages are not notarized: the first time, open the app from System Settings → Privacy & Security → Open Anyway (or right-click → Open). The Windows package is not signed: click More info and Run anyway once. On Linux prefer the.deb; the AppImage needs FUSE (--appimage-extract-and-runwithout). They arrive a little after the APK, andSHA256SUMS-desktop.txtlists every checksum. A 1.0.6 desktop on Windows downloads this version in the background on an unmetered network, offers it in the corner menu and installs it on a real quit. Your settings stay where they were. - The relay is 0.30.0; a 1.0.6 client works against it unchanged. What changes for a person: the relay keeps the record of the turns it answers, from any client version, since 0.29 went live on 2026-10-24; only a 1.0.7 app adds the turns it ran on a key of its own. For operators:
RECORD_TURNS(1),RECORD_KEEP_DAYS(0, forever),MEDIA_DIR,MEDIA_MAX_GB(50),MEDIA_ACCOUNT_MAX_MB(2048) andRECORD_UPLOADS_PER_MINUTE(120) shape the record,CALLS_KEEP_DAYS(90) andEVENTS_KEEP_DAYS(365) the call rows and the timeline,CLOUD_GEOIP=0switches the location lookup off; the nanoMuse clients only switch is on by default, so a relay whose people call the models from scripts turns it off on Controls; the hub closes a socket past 60 a minute from one address or 32 per account with4008 too_many_connections; the console's build (cloud/console) is committed undernanomuse_cloud/console/admin/and ships in the package;backup.shmirrors the record's files beside the database copies and the hosted unit keeps fourteen days of them. docs/cloud.md (github.com), docs/self-hosting.md (github.com), docs/hub.md (github.com) and cloud/README.md (github.com) have the details. - The runtime asks a little more and names itself. Every model call carries
User-Agent: nanoMuse/<version>(aUser-Agentin a slot'sextra_headersstill stands). Instrictmode the Sentinel asks before a web search, a remembered fact, a cancelled reminder or a rewritten goal; the defaultaskmode asks nothing new.coding→sendasks like the other sensitive steps. A remote MCP server counts as sending data out unless its settings sayegress = false, andconnect_timeout_s(30) andcall_timeout_s(120) bound its handshake and calls. Nothing else inconfig.tomlchanges. - Where to get it.
| Browser | demo.nanomuse.dev, a nanoMuse on a simulated phone, after a sign-in; a demo, the apps below are the real thing |
| Android 8.0+, arm64 | nanoMuse-1.0.7-arm64.apk |
| iPhone, iPad | TestFlight, a beta that goes through Apple's review; build 30 (1.0.7) once its review has passed |
| Windows 10+ | nanoMuse-Desktop-1.0.7-win-x64.exe (the desktop app, on DeepSeek Harness; not signed) |
| macOS 12+ | nanoMuse-Desktop-1.0.7-mac-arm64.dmg / -mac-x64.dmg (or the .zip: unzip, drag to Applications; not notarized) |
| Linux x64 | nanoMuse-Desktop-1.0.7-linux-x64.deb (preferred) / .AppImage (needs FUSE; --appimage-extract-and-run without) / .tar.gz (unpack anywhere, run ./nanomuse-desktop) |
| DeepSeek Harness Desktop you already run | dsh-nanomuse-1.0.7.tgz, dsh plugin --profile desktop add … (how) |
| Docker | ghcr.io/nano-muse/nanomuse:1.0.7 (also :latest), the runtime with the web console on port 8787 |
| Your own relay | bash scripts/self-host.sh, docs/self-hosting.md (github.com) |
In our measurements GitHub's own downloads are quick from China as well; if they fail where you are, the same files are on nanomuse.cn/dl/v1.0.7/ within fifteen minutes.
Community
nanoMuse is open source, free and non-profit. Sign in with a phone number or an e-mail and you get a starting allowance; the developer pays for it. The account page shows what is left and how to add more. When it is gone, use your own key or a plan you already pay for (how); the key you add can take over the chat and the screen, and pictures and clips are its from the start; the account can be switched off as a model source while you keep it for sync and your devices. With an account, nanoMuse Cloud keeps the record of your conversations with its models, and from this version the turns your own key answered, so that your devices show the same history and a problem can be seen whole; your devices and the person running the relay can read it, nobody else; one tap under Data controls deletes it, and nothing is sold (privacy policy); delete the account whenever you want. The same relay runs on a server of yours: docs/self-hosting.md (github.com).
Thanks to @mongo027 for the live reasoning (#484), to @cutey-none for Parallel search and the settings' tint (#566, #569), to @Mola-maker for the several times a day (#558), to @hobostay for the hub's caller check (#567), to @z1010223zero-pixel for the skill files and the provider switch (#572, #581), to @Yicheng-Mark for the proxy, the console encoding, the cross-drive write and the UTF-8 tests (#587, #594, #595, #596), to @takiAA for the relay's page scans and counter writes (#589, #590), to @aiapienthusiast for Cheaper Inference (#554), to @Longfellow1 for the goals' benchmark (#585), and to everyone who reported #517, #553, #555, #557, #560, #561, #568, #571, #580, #586 and #588. The roadmap says where help is wanted, and docs/parity.md (github.com) says what each client has. Open an issue · send a pull request · Discussions · Discord · star the repo; if it is useful to you, a star helps others find it.
Based on OpenMinis 1.13 (GPL-3.0), modified since 2026-09-24. The complete corresponding source of this build is tag v1.0.7 plus the android/deps/proot submodule (nano-muse/proot); the desktop installers and the Docker image are built by CI from the same tag. The whole repository is GPL-3.0-or-later. nanoMuse Desktop carries DeepSeek Harness unmodified, with its licence files inside; harness in the name is the word, not DeepSeek's. The chat apps follow nanobot's design (MIT); the desktop's operator is ported from UI-TARS-desktop (Apache-2.0; THIRD_PARTY_NOTICES.md). nanoMuse is not affiliated with Meta; Muse is a trademark of Meta Platforms, Inc. The desktop follows what Muse's app looks like and does, written down from using it; none of Meta's assets, code or content is in it.
What's Changed
- feat(android): one scheduled task, several times a day by @Mola-maker in https://github.com/nano-muse/nanoMuse/pull/558
- feat(runtime): Cheaper Inference in the provider catalogue by @aiapienthusiast in https://github.com/nano-muse/nanoMuse/pull/554
- fix(android,ios): the Feed shows a day's newest batch first by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/562
- feat: stream reasoning tokens live to the chat UI by @mongo027 in https://github.com/nano-muse/nanoMuse/pull/484
- feat(android): a chats backup can leave the files out, and a backup can run from the shell by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/563
- docs(ios): build 29 is 1.0.6, uploaded from the tag v1.0.6 by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/565
- feat(relay): call telemetry, live meter and a rebuilt admin console by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/570
- fix(desktop): tint settings pages only while searching by @cutey-none in https://github.com/nano-muse/nanoMuse/pull/569
- fix(desktop): verify caller identity in task stop and approve by @hobostay in https://github.com/nano-muse/nanoMuse/pull/567
- feat(runtime): Parallel's Search MCP as a web search provider by @cutey-none in https://github.com/nano-muse/nanoMuse/pull/566
- fix(runtime): list a skill's files when its folder sits under a dotted path by @z1010223zero-pixel in https://github.com/nano-muse/nanoMuse/pull/572
- chore: project check-up, first batch (apps-only relay switch, runtime user agent, contributors workflow) by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/573
- feat(relay): the record — every chat turn in full, pictures as files (0.29) by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/579
- chore: project checkup, part three — relay, runtime, desktop, web, Android strings, docs by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/582
- fix(relay): bound the daily shape-row repair to the last three days by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/583
- chore: checkup round 2 (relay reads off the loop, record on every client, honest copy) by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/591
- fix(ios): upstream strings with Spanish only read in all nine languages by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/592
- test(goals): add a fixed offline evaluation benchmark by @Longfellow1 in https://github.com/nano-muse/nanoMuse/pull/585
- fix(relay): bound history page scans by timestamp by @takiAA in https://github.com/nano-muse/nanoMuse/pull/589
- chore(relay): keep fourteen days of database copies on the hosted relay by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/597
- test: read the iOS project and the avatar sources as UTF-8 by @Yicheng-Mark in https://github.com/nano-muse/nanoMuse/pull/596
- fix(runtime): a write into an extra root on another drive is reported by @Yicheng-Mark in https://github.com/nano-muse/nanoMuse/pull/595
- docs(privacy): say what the hub keeps about each device by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/598
- fix(relay): offload request counter writes by @takiAA in https://github.com/nano-muse/nanoMuse/pull/590
- fix(runtime): drop the other provider's key when the provider changes by @z1010223zero-pixel in https://github.com/nano-muse/nanoMuse/pull/581
- fix(runtime): print the report on a console whose code page is not UTF-8 by @Yicheng-Mark in https://github.com/nano-muse/nanoMuse/pull/594
- docs(privacy): the devices bullet follows the sync bullet whole by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/601
- test(sync): let the start-up pull land before a test adds rows by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/600
- fix(runtime): reach our own server without the environment's proxy by @Yicheng-Mark in https://github.com/nano-muse/nanoMuse/pull/587
- build(release): 1.0.7 Logbook by @lgy0404 in https://github.com/nano-muse/nanoMuse/pull/604
New Contributors
- @aiapienthusiast made their first contribution in https://github.com/nano-muse/nanoMuse/pull/554
- @mongo027 made their first contribution in https://github.com/nano-muse/nanoMuse/pull/484
- @Yicheng-Mark made their first contribution in https://github.com/nano-muse/nanoMuse/pull/587
- @z1010223zero-pixel made their first contribution in https://github.com/nano-muse/nanoMuse/pull/572
Contributors
@aiapienthusiast · @cutey-none · @hobostay · @lgy0404 · @Longfellow1 · @Mola-maker · @mongo027 · @takiAA · @Yicheng-Mark · @z1010223zero-pixel
Full Changelog: https://github.com/nano-muse/nanoMuse/compare/v1.0.6...v1.0.7