Skip to content

Releases: mirror-mind-ai/mirror-desktop

v0.4.0-alpha.3 — Timing the Start of a Turn

Choose a tag to compare

@alissonvale alissonvale released this 05 Nov 00:54

digest: >
Nothing changes on screen. The app now times the start of every turn, step by step, so the wait
of up to 40 seconds before the agent answers on a long Conversation can be measured where it
happens.

v0.4.0-alpha.3 - Timing the Start of a Turn

Date: 2026-11-04

Highlights

  • No visible change. This version measures; it does not yet make anything faster.
  • Every turn's start is timed. From the moment the turn is admitted to the moment Pi starts its
    agent, each step is recorded in the Journey's timing ledger (CR194).
  • Still Intel only, and not signed.

Where We Started

After Send, Pi takes about 2 seconds to have the message on a small Journey and up to 42 seconds on
a long one. Measured apart on copies, Pi, the session and the Mirror context explain about 10 of
those seconds. The rest happens only in the running app.

What Changed

  • The Pi worker marks each step as it finishes: admission, session baseline, journal running,
    extensions, Mirror context, workspace, spawn, prompt write, first output and agent start. One
    turn_start record per turn goes into settlement-timings, also when the turn ends before the
    agent starts. A failed write never fails the turn (CR194).

What Does Not Change

The same Mirror core and the same Pi as v0.4.0-alpha.2. Nothing in a home's database or in the
app's preferences changes.

Conscious Exclusions

  • No fix yet. The fix follows the measurement.
  • The timing ledger keeps 256 records per Journey, so it now holds about half as many
    settlements as before.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

In development, on a small session, the Mirror context already takes 6 of the 8 seconds, and every
native step together takes a tenth of a second. Measuring the running app is cheaper than guessing
from its parts.

Next Horizon

Read the timings of long Conversations in production, then fix the step that grows (CR194).

v0.4.0-alpha.2 — The Message Comes Back

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 23:21

digest: >
A message cancelled in the first seconds comes back to the composer again. The persona named at
the top of the answer had made an empty answer look written, so the message was lost.

v0.4.0-alpha.2 — The Message Comes Back

Date: 2026-11-04

Highlights

  • Cancel right after sending, and the message is yours again. It returns to the composer with
    the notice "Message returned to the composer", ready to edit or send again (CR193).
  • No empty answer is left behind. A cancelled turn whose answer held only the persona no longer
    stays in the conversation.
  • Still Intel only, and not signed.

Where We Started

CR183 (v0.3.0-alpha.9) gave back a message whose turn was cancelled before any answer. CR188
(v0.3.0-alpha.12) then started naming the persona at the top of the answer as soon as the Mirror
delivers its context, which happens before Pi takes the message, often 20 to 40 seconds after Send.
The Navigator found in Nautilus that the message was lost again and the composer stayed empty.

What Changed

  • The persona marker no longer counts as an answer. A cancelled turn with no prose, no interrupted
    fragment and no work gives its message back, and its persona-only answer is dropped (CR193).

What Does Not Change

The same Mirror core and the same Pi as v0.4.0-alpha.1. Nothing in a home's database, the app's data
folder or its preferences changes.

Conscious Exclusions

  • The wait before Pi takes the message is not shortened here; it is why this window is so easy
    to hit and may get its own change.
  • The journal records of these short cancels still stop one step before interrupted; this did
    not cause the loss and is read separately.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

Two changes that each passed their own check can still meet badly: one decided "unanswered" by an
empty answer, the other began writing into that answer earlier. The decision now lives in one named
function, tested with the persona present.

Next Horizon

The Navigator's check in production, then RS027 and the launch.

v0.4.0-alpha.1 — Nautilus for Mirror

Pre-release

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 17:32

digest: >
The first Nautilus for Mirror. Mirror Desktop TS becomes Nautilus, a new app with its own name,
identifier, data folder, update channel and the Nautilus spiral back as its icon, and a script
carries the 0.3 app's state across, Conversations, Pi, settings and key included.

v0.4.0-alpha.1 — Nautilus for Mirror

Date: 2026-11-04

Highlights

  • Nautilus for Mirror. The app is called Nautilus for Mirror in the Dock, Finder and window,
    and Nautilus in its menu. Its words say Nautilus, and the violet spiral it had as Nautilus
    Harness is its icon again.
  • A new app, beside the old one. Its bundle identifier is ai.mirrormind.nautilus, so it has
    its own data folder and its own update channel (updates.mirrormind.sh/nautilus). Mirror Desktop
    TS stays installed and works as before, as the way back.
  • The state comes across. scripts/carry_03_state.mjs copies the 0.3 app's data folder into
    Nautilus's: every home's Journeys, Conversations and Pi sessions, Pi and Claude Code as
    installed, the model settings, the OpenRouter key and the avatar. It also repairs, on proof, the
    older history the 0.2 carry had left failing its checks (CR192).
  • Still Intel only, and not signed.

Where We Started

v0.3.0-alpha.16 closed the Mirror Desktop TS line. The Navigator chose to rename the app and to move
every machine coordinate with the name (CV-013), so that new people arrive with the identifiers the
product will keep.

What Changed

  • Name, identifier and channel (CV-013.DS-002, slice 1): release line 0.4 under
    ai.mirrormind.nautilus; the release gate knows three lines and refuses any crossing.
  • The words (slice 2): the interface, native messages, the microphone permission and the
    release route's output say Nautilus.
  • Labels in data (slice 3): prompts open with [Nautilus Journey authority], Pi sessions end
    · Nautilus · Generation N, and new Mirror Conversations carry the interface nautilus (CR171).
    Older prompts and labels are still read, and Mirror's learning reads both labels.
  • The icon: the Nautilus Harness spiral (0c4684cb), with its DEV and a new EVAL badge.
  • Carrying the state (CV-013.DS-003): a dry-run-first, all-or-nothing script that never writes
    the 0.3 folder, clones files on APFS and moves only the structural session paths.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.16. The Mirror home does not move and its
database is not touched. The 0.3 channel keeps answering for the installations still on it.

Conscious Exclusions

  • No automatic move from 0.3. Mirror Desktop TS is not offered this version: a different app
    cannot be installed over it. Nautilus is installed from its DMG and the state is carried by hand.
  • The repository and package names stay mirror-desktop for now.
  • The sites still say Mirror Desktop until CV-013.DS-005.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

A rename is cheap in words and costly in coordinates: identifiers, folders, channels, stored labels
and the hashes that guard history all carry the old name. Rehearsing the carry on a clone of
production found two defects before they could reach anyone: a copy that did not clone, and history
receipts the previous carry had left stale.

Next Horizon

The Navigator's cutover (CV-013.DS-004), then the sites (DS-005): nautilus.mirrormind.sh, and the
Mirror site pointing to Nautilus.

v0.3.0-alpha.16 — The Last of the Line

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 14:21

digest: >
The last version on the Mirror Desktop TS line. It changes nothing in the app; it exists so that
an app left open on alpha.15 can show it arrive without a restart. Next comes Nautilus for Mirror.

v0.3.0-alpha.16 — The Last of the Line

Date: 2026-11-04

Highlights

  • The last Mirror Desktop TS version. The app is becoming Nautilus for Mirror, which comes
    as a new app with its own name, identifier and update channel.
  • Nothing changes in the app. This version carries no new behaviour.
  • It proves alpha.15's promise. An app left open on alpha.15 should show this version in its
    chip without being restarted.
  • Still Intel only, and not signed.

Where We Started

v0.3.0-alpha.15 (CR191) taught the chip to ask the update channel again while the app stays open.
That can only be seen in the field with a version published after it.

What Changed

  • Only the version number. The source is v0.3.0-alpha.15's, with the roadmap records for CV-013
    (Nautilus for Mirror) added beside it.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.15. Nothing in a home's database or in the
app's preferences changes. This line's update channel keeps answering, so an installation that has
not moved to Nautilus yet keeps working and can still be updated to here.

Conscious Exclusions

  • No rename here. Renaming inside this line would leave the identifier, data folder and channel
    under the old name; CV-013 moves all of them together as a new line.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

Some behaviour can only be proven by the next release: a check for new versions needs a new version
to find. A release with no change of its own is a fair price for that evidence.

Next Horizon

Nautilus for Mirror (CV-013): line 0.4 with identifier ai.mirrormind.nautilus and its own
channel, a script that carries this app's state across, and its own site at nautilus.mirrormind.sh.

v0.3.0-alpha.15 — Noticed While Open

Pre-release

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 13:20

digest: >
A new version is now noticed while the app stays open: the version chip asks again every four
hours, and when the window comes back after more than an hour.

v0.3.0-alpha.15 — Noticed While Open

Date: 2026-11-04

Highlights

  • A new version shows up without closing the app. The version chip asks the update channel
    again every four hours, and when the window comes back after more than an hour.
  • Nothing else changes in how updating works. The notice is the same chip, installing is still
    your choice, and it still waits for the turn to finish.
  • Still Intel only, and not signed.

Where We Started

The update channel was asked once, when the window loaded. The app is used continuously and rarely
closed, so a release published later could go unnoticed for days (CR191).

What Changed

  • CR191. While the app is open, the chip looks at the clock every five minutes and asks the
    channel when four hours have passed since the last check, or when the window regains focus or
    becomes visible after more than an hour. A Mac that slept through its timers is covered by the
    return to the window.
  • One check at a time, and silent. A later check shows no "checking" state, and a failed one
    (offline, channel down) shows nothing; the next moment asks again.
  • The chip keeps what the person is looking at. A later check never interrupts an installation
    or an error message being read, keeps an update already shown, and moves a shown notice to a
    newer version when one appears.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.14. Nothing in a home's database or in the
app's preferences changes. The update channel and its manifests are unchanged. Mirror Desktop 0.2
is not offered.

Conscious Exclusions

  • No system notification. The notice stays in the chip; a notification outside the app was not
    asked for.
  • The intervals are not a setting. Four hours and one hour were agreed with the Navigator.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The check at load assumed an app that is opened and closed like a document. A workspace that stays
open for days needs its own clock, and a sleeping Mac means the clock alone is not enough: coming
back to the window is the moment that matters.

Next Horizon

One more release, published while this one stays open, to see the notice arrive without a
restart; then CV-013, the rename to Nautilus for Mirror.

v0.3.0-alpha.14 — Only the Canonical Set

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 12:22

digest: >
The app opens with only Conversation beside each Journey. The Agent Field (until now the Context
Map) and the Agent Canvas become the first extensions, off by default and turned on in a new
Settings tab, Extensions.

v0.3.0-alpha.14 — Only the Canonical Set

Date: 2026-11-04

Highlights

  • A Journey opens on its Conversation alone. With no extension turned on, the surface tabs are
    not drawn.
  • Settings › Extensions turns on the Agent Field and the Agent Canvas, each adding its
    tab beside Conversation. Both are off by default, on every installation.
  • Two names change: the Context Map is now the Agent Field, and Agent's Canvas is now Agent
    Canvas.
  • Still Intel only, and not signed.

Where We Started

CV-012 decided that the app ships a small canonical set (Journeys, personas and their
conversations) and that everything else becomes an extension the person turns on or off. The
extension mechanism does not exist yet, and the launch should not show functions that will later
leave the core: hiding them now avoids taking them away afterwards (CV-012.DS-001).

What Changed

  • CV-012.DS-001, the Extensions tab. A seventh Settings tab says that extensions are still
    being built and that its options bridge what exists today to how it will work. It holds two
    switches whose state reads in words as well as in colour.
  • The tabs beside Conversation follow the switches. A switcher with only Conversation left is
    not drawn, and a Journey remembered on a surface that is now off opens on its Conversation.
  • The Agent Canvas is read only while it is shown, so turning it off also stops reading the
    drawing from disk.
  • A Journey document clicked in a conversation opens in the Agent Field when it is on, and
    outside the app, like any other local file, when it is off.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.13. Nothing in a home's database or in a
Journey's files changes; the switches are kept with the app's preferences for each home, and the
surfaces keep their stored ids. Ariad and the Tactical and Strategic altitudes were already hidden
and stay so. Mirror Desktop 0.2 is not offered.

Conscious Exclusions

  • The extension mechanism itself (installing, versioning, contributing surfaces) is CV-012's
    later work, after the launch.
  • Switches for Ariad and the altitudes are not offered; they are not ready to be turned on.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The design that shipped was neither of the two proposed: not a switch per function, not a method
switch above them, but a tab that says honestly that the mechanism is still on its way. And two of
the five functions the launch had to hide were already hidden, which left exactly the two the
Navigator named.

Next Horizon

CV-013, the rename to Nautilus for Mirror, the last step before promotion.

v0.3.0-alpha.13 — The Person at the Top Right

Choose a tag to compare

@alissonvale alissonvale released this 04 Nov 11:12

digest: >
A correction sent in the first seconds of a turn now waits and is taken; the person is shown at
the top right and named on their own turns; Chapters moves into the ⋯ menu; the reset dialog says
plainly what resetting does and when it helps.

v0.3.0-alpha.13 — The Person at the Top Right

Date: 2026-11-04

Highlights

  • A correction sent right after Send is taken. It waits, pending, until the turn can receive
    it, instead of being refused.
  • The person is at the top right and on their turns. A round button with the photo or initial
    shows the person's name, and their turns carry that name instead of "You".
  • Chapters is in the ⋯ menu, and the reset dialog explains what a reset does, when it helps,
    and that Cancel is the safe default.
  • Still Intel only, and not signed.

Where We Started

A correction sent in the first three seconds of a turn was refused, while one sent later was
taken (CR187). Pi was not the one refusing: the app asked before its own invocation could take the
correction. The header carried a Chapters glyph and no sign of whose Mirror this is; the person's
turns said "You" beside a hard-coded "N"; and the reset dialog did not say plainly that the agent
would forget the Conversation (CR190).

What Changed

  • CR187. While the invocation does not exist yet, has no Pi process yet, or has not sent the
    turn's prompt, the app answers "not yet" and writes nothing. The correction stays pending and is
    asked again every quarter second until it is taken, the turn ends (it is then recorded as
    unconsumed) or two minutes pass. A correction never reaches Pi ahead of the prompt it corrects,
    and a refused correction now keeps its reason.
  • CR190, the person. The name is the one typed at setup ("What should your Mirror call you?"),
    or one written in Settings › You › Name, or the home's user read as a name (alisson-vale reads
    "Alisson Vale"). Its initial replaces the "N" in the transcript, the turn navigator and Settings.
  • CR190, the header. At the top right: ⋯, then the person button. Chapters is the first item
    of the ⋯ menu, separated from Reset agent context, and says in the item why it is unavailable
    when the Conversation has no chapters.
  • CR190, the reset dialog. It says the agent starts with no memory of the Conversation, that the
    past generation stays readable but cannot be made active again, and that the Mirror's memories are
    untouched. It says when to reset, points to Compact now when the context is only long, has
    Settings' Close button, and makes Cancel the focused, emphasized action.
  • CR188, a remainder. The model's ◇ persona line no longer flashes in the live agent comments.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.12. Nothing in a home's database changes; the
written name is kept with the app's preferences for that home. Mirror Desktop 0.2 is not offered.

Conscious Exclusions

  • The Mirror's written name is not read from the core. Its Desktop API does not expose the user
    identity; an extend-only core read can later replace the name taken from the home's user.
  • The 41 seconds between Send and Pi's prompt that CR187 observed are not reduced here.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The refusal looked like Pi's and was the app's: reading Pi's source showed it queues a correction
at any point, which moved the repair to where the app asked too early. And a name the setup screen
already asked for was being thrown away; the Navigator's question found it before the field in
Settings became the only way to give it.

Next Horizon

CV-012.DS-001, launching with only the canonical set, then CV-013, the rename to Nautilus for
Mirror, before promotion.

v0.3.0-alpha.12 — The Persona Above the Answer

Choose a tag to compare

@alissonvale alissonvale released this 03 Nov 16:59

digest: >
Each answer names the persona it speaks as above the text, from the context the Mirror delivered,
instead of a signature trailing the answer.

v0.3.0-alpha.12 — The Persona Above the Answer

Date: 2026-11-03

Highlights

  • The persona is named above the answer, from the start of the turn, and stays there after the
    turn ends, after reopening the Conversation and after relaunching the app.
  • No signature trailing the answer. A ◇ persona line the model writes at the end is no
    longer shown in the text.
  • Still Intel only, and not signed.

Where We Started

On the 0.3 line the Mirror asks the model to sign its answer, and the model signs on the last line.
The surface read only a signature on the first line, so the row above each answer said "Agent" and
the signature trailed the text (CR188). Since the cutover, 94 of 126 answers in production signed
last, none first, and 32 not at all.

What Changed

  • Before Pi starts, the app tells the surface which persona the Mirror's context speaks as, and the
    turn keeps it when it settles.
  • When a Conversation is loaded, the persona is read from Pi's own record of the context each turn
    was given. Only the persona's name is read; the context is not.
  • An answer from before, with no context recorded, still shows the persona from its own signature,
    on its first or last line.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.11. Which persona the Mirror chooses is the
core's decision and is unchanged. Mirror Desktop 0.2 is not offered.

Conscious Exclusions

  • The Mirror's choice of persona still follows one keyword, and naming a persona in the prompt
    does not choose it (CR189, recorded as a core debt; the core's persona work may replace it).
  • A correction sent in the first seconds of a turn is still refused (CR187).
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The first repair read the persona from Pi's record, assuming the end of a turn reads it again. It
does not: since CR184 a turn settles on the conversation already on screen. Two checks in the
development app failed before the persona was written where the settled turn keeps it.

Next Horizon

CR187 and the rest of the RS026 queue.

v0.3.0-alpha.11 — Settings by Intent

Pre-release

Choose a tag to compare

@alissonvale alissonvale released this 03 Nov 14:31

digest: >
Settings are grouped by what the person wants to do, setup offers Claude through Claude Code, and
a Journey whose project path starts with ~/ has its agent work in that project.

v0.3.0-alpha.11 — Settings by Intent

Date: 2026-11-03

Highlights

  • Settings grouped by intent. Models, Mirror, You, Sound & Voice, Updates and Diagnostics.
    Settings opens on Models.
  • Claude in setup. The step that connects a model provider offers Claude through Claude Code,
    as Settings already did, and an installed Claude lets setup go on.
  • The agent works in the Journey's project when its path is written from the home folder
    (~/…), instead of in a new folder under ~/Mirror Journeys/.
  • Still Intel only, and not signed.

Where We Started

Models were spoken of in three tabs (Agent, Connections, Runtime), and the Mirror home's path sat in
a diagnostic list (CR175). A Journey whose project path was ~/Code/szen_play had its turn refused
that folder as not absolute, so the agent wrote under ~/Mirror Journeys/ (CR186).

What Changed

  • Models holds the providers, the default model and thinking, and Model Intents. Mirror
    holds the bound home, its database, the binding control, the OpenRouter key and what the Mirror
    learned. You holds the avatar and the appearance. Diagnostics holds the runtime channel
    and the current session controls.
  • Setup's provider step shares the Connect block with Settings.
  • A registered project path starting with ~/, or a bare ~, names the home folder for the turn
    and for the Journey's documents, canvas and projections. A ~user path is still refused.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.10. Sound & Voice and Updates are unchanged.
Mirror Desktop 0.2 is not offered.

Conscious Exclusions

  • A correction sent in the first seconds of a turn is still refused (CR187, next).
  • A folder already created under ~/Mirror Journeys/ is left in place.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The Mirror keeps a project path as the person wrote it, so every reader of that path has to
expand it; one of 76 paths in production was written with ~, and that was enough to send a
Journey's agent elsewhere.

Next Horizon

CR187 and the rest of the RS026 queue.

v0.3.0-alpha.10 — A Turn Ends Quietly

Pre-release

Choose a tag to compare

@alissonvale alissonvale released this 03 Nov 02:29

digest: >
The end of a turn no longer freezes a long conversation: the transcript is not drawn again, and
the app stops reading and parsing the whole stored conversation several times per turn.

v0.3.0-alpha.10 — A Turn Ends Quietly

Date: 2026-11-03

Highlights

  • No flash when the agent finishes. The conversation stays in place at the end of a turn
    instead of being drawn again from the top.
  • No freeze after the answer. In a conversation of production's size (6,196 messages, 34 MB
    stored), the longest pause on the page at the end of a turn fell from 12 s to 0.21 s.
  • Still Intel only, and not signed.

Where We Started

In long conversations, the Conversations area flashed hard when the agent finished, and the app
seemed stuck for several seconds afterwards (CR184). The output also felt slow during a turn
(CR185).

What Changed

  • A finished turn is settled on the conversation already on screen, plus the Mirror's confirmation,
    instead of on a copy read back from disk that lacked what the screen derives from Pi.
  • Each save sends only the loaded chapter. Keeping the earlier history, messages and the record of
    agent actions, is now done by the native save, which already read the stored file. Before, the
    page read and parsed the whole conversation before every save.
  • The checks before and after the Mirror records a turn read only identity and the turn ledger,
    not the messages.
  • A save at production's size went from 32.6 MB to about 1 MB.
  • The Working glow now fades on its own layer and respects the reduced-motion preference in the
    conversation list too.

What Does Not Change

The same Mirror core and the same Pi as v0.3.0-alpha.9. The stored conversation keeps every
message and every record of agent actions; loading earlier chapters reads them back. Mirror
Desktop 0.2 is not offered.

Conscious Exclusions

  • The native save still takes a few seconds on a very large conversation, off the page's main
    thread.
  • The page still does measurable work per frame while text streams. It is not felt, so it is
    not changed.
  • No signing, notarization or Apple Silicon build yet.

What We Learned

The slow frames first measured during a turn were the recording's Screenshots instrument, not the
app. And one of two changes made together tripled the cost it meant to cut; they had to be
measured apart.

Next Horizon

CR182 and the rest of the RS026 queue.