The desktop
Text

The desktop

The desktop is exe's control panel. It is a page in your browser, drawn as a Mac OS 9 desk: this machine's virtual machines (VMs), agent sessions, apps and published sites are its icons and windows. It opens on a computer and on a phone.

What the desktop is for

For you:

  • Run your VMs. Every VM has an icon whose screen shows its state. Double-click it for the VM's window, or choose File → New VM… to make another.
  • Work beside your agents. Claude Code and Codex open in windows of their own, and on a machine with tmux their sessions keep running after you close the browser. The desktop counts the tokens they use, and a notification can tell you when a turn ends.
  • Open apps and files. Every installed app has an icon, and Workspace is the folder of files you, your agents and your apps share.
  • Watch what you have published. A lamp says whether your Cloudflare tunnel is healthy, and Windows → My Apps shows every address you have published.
  • See how the machine is doing. About This Computer shows its memory and disk, and a small chart follows its CPU, memory, GPU, network or disk.
  • Find the desk as you left it. The layout of the windows is saved on the machine and mirrored to every browser that has the desk open, so a window you move here moves on your other screens too.

A coding agent, such as Claude Code or Codex, does not need the desktop. It drives the same exe over HTTP, the command line and SSH, and Help → Agent Skill Guide… gives you a prompt that teaches it how. Four things an agent or a script does that way show on the desk:

  • A note in the Newsfeed. POST /v1/newsfeed with a title and a body puts a note in the Newsfeed of this machine and of every machine joined to it: finished work, or a problem you should see.
  • A notification. A script on the exe machine sends its own words to every device that has notifications on (POST /v1/push).
  • A notice. A script on the exe machine puts a toast on every desk that stays until you close it (POST /v1/notices).
  • The desktop menu. GET /v1/ui/menu and PUT /v1/ui/menu read and replace the right-click menu. An agent changes it only when you ask.

The menu bar

The menu bar runs along the top and works like the classic Mac it resembles. The small Mac at its left end is the Apple menu.

MenuItemWhat it does
AppleAbout This ComputerShows the machine, its memory and disk, and each running VM.
AppleSoftware Update…Moves an installed exe to the newest release. See Updating.
AppleReload for UpdateReloads the desktop into a new build. It is there only while unsaved work holds that reload back.
AppleThe name of an open windowBrings that window to the front.
FileNew VM…Makes a VM. See Virtual machines.
FileUpload to Workspace…Puts a file from this device, 100 MB at most, in the Workspace.
FileClose WindowCloses the window in front.
FileRefreshLoads the lists of VMs and apps again.
WindowsVirtual MachinesThe list of VMs.
WindowsMy AppsEvery address you have published, an icon each.
WindowsChatThe Chat window. It is in the menu once Chat has a model to work with.
WindowsNewsfeedEvents from this machine and the machines joined to it.
WindowsIcon EditorRepaints the desktop's icons.
WindowsConfigurationEdits exe's settings. See Configuration.
WindowsLog ViewerThe daemon's log and the log of requests to the API.
SpecialMac OS 9Opens a Mac running Mac OS 9. See Mac OS 9.
SpecialMac OS XOpens a Mac running Mac OS X 10.4 Tiger. See Mac OS X.
SpecialMac OS X IntelOpens an Intel Mac running Mac OS X 10.4.11, on Linux on x86-64 only. See Mac OS X Intel.
SpecialNode Sync…Pairs this exe with another one. See Joining desks together.
SpecialJoin a Hub…Joins a hub, a step at a time. See The Hub.
SpecialCloudflare Status…The tunnel's state and its live counters.
SpecialCloudflare Setup Wizard…Sets up the tunnel and the domain. See Publishing to the web.
SpecialSet API Token…Asks for the API token this browser sends to exe.
HelpWelcome…exe in six cards.
Helpexe Documentation…This manual.
HelpAgent Skill Guide…A prompt that hands exe to a coding agent.

Under a rule, the Apple menu lists every open window by name, with a check mark beside the one in front. On a phone, where one window fills the screen, that list is how you go from one open window to another.

A diamond beside the small Mac, and beside Software Update… in its menu, says a newer release is waiting.

At the right end of the bar:

  • Show Desktop — the button with a bare desk on it.
  • Show All Windows — the button with four small windows on it.
  • Search — the magnifier.
  • The clock. Rest the pointer on it for the date. A click opens the World Clock app, when that app is installed.

Icons on the desktop

Double-click an icon to open it. A single click selects it.

  • Workspace — the folder of files you, your agents and your apps share. See Workspace and files.
  • Terminal — a shell on the machine exe runs on.
  • Claude Code and Codex — each appears when its CLI is installed on this machine. The three have a chapter of their own, Claude Code, Codex and Terminal.
  • One icon for each VM. Its screen is green while the VM runs, amber while it starts or stops, dark when it is stopped and red when it is in error.
  • One icon for each installed app. See Apps.
  • Newsfeed, Chat and the Trash. Chat appears once Chat has a model to work with: Ollama answers, or, when Chat runs on a ChatGPT subscription, you are signed in.

A link can open an app on the desktop. Put #show=app: and the app's name after the desktop's address:

http://127.0.0.1:7777/#show=app:Ping

The app's window opens, or comes to the front if it is already open. A desktop that is already open does the same when its address changes, so a bookmark or a link from another page works whether the desktop is open or not.

  • The name is the app's ID: a built-in app's lowercase ID, such as hub, or the folder name of an app you installed, such as Ping. Write a space as %20: World%20Clock. The desktop menu names apps the same way; see Arguments, paths and app names.
  • A name that is not an installed app does nothing.
  • Mac OS 9, Mac OS X and Mac OS X Intel do not open from a link, because opening one starts its Mac. Open them from their icons.
  • The window is part of the layout, so it opens on your other screens too.

Move, resize and close windows

Windows behave like OS 9 windows. The close box is at the left end of the title bar; the zoom box and the shade box, where a window has them, are at the right end.

ToDo this
Move a windowDrag its title bar.
Resize itDrag its left, right or bottom edge, or the grow box in its bottom-right corner. Not every window can be resized.
Collapse it to its title barClick the shade box, or double-click the title bar. The same again brings it back.
Switch between two sizesClick the zoom box. A window of one size, such as Welcome, goes back to that size.
Close itClick the close box. File → Close Window closes the window in front.
Bring it to the frontClick it, or choose its name in the Apple menu.

The whole layout is saved on the daemon: positions, stacking, which windows are open. It is mirrored live to every browser looking at this desk, so dragging a window here moves it on your other screens too. A phone shows one window at a time and keeps its own.

Terminal, Claude Code and Codex windows are mirrored the same way. One you open here opens on your other screens, and its close box closes it on all of them. A terminal window keeps the same columns and rows on every screen, so a program in it looks the same on each, even where the font is wider.

Save a screenshot of a window

Right-click a window's title bar (on a touch screen, press and hold it) and choose Save a Screenshot. A PNG of that window alone lands in the Workspace's Screenshots folder, named for the window and the time: ready for a post or a bug report, and where an agent can read it.

  • The picture is the window with its frame and shadow, on a clear ground. Nothing of the desktop or of a window lying over it is in it.
  • The window is saved as it stands: scrolled where you left it, the field you were typing in still ringed. Dialogs have the menu too.
  • On a sharp screen the picture is sharp too: two pixels to the point on most, at Windows' 150 percent as well, and three on a phone. The file says so the way a Mac's own screenshots do (144 to the inch at two), so Preview and Quick Look open it at the window's size, not twice it.
  • Three things come out empty or plain: a web page from the Workspace and a player from another site (the desktop cannot see into them), a 3D view that is not redrawn every frame, and selected text, which shows unselected.

The desktop menu

Right-click an empty part of the desktop (on a touch screen, press and hold it) for the desktop menu: a NeXT-style menu at the pointer, with shortcuts to VMs, apps, windows and tools. Choose Customize… to edit it.

The format, every supported action and examples are in the chapter Desktop context menu.

Show Desktop

The button with the bare desk on it slides every open window off to the nearest edge of the screen, a sliver of each left showing, so the desktop and its icons are clear to use.

  • Click a window's sliver to bring them all back, that one in front.
  • The button again, or Escape, brings them back too; so does opening a window from the desk.

The desktop menu reaches it as showdesk. A phone has no such button.

Show All Windows

The button left of the magnifier shrinks every open window into a grid, so you see them all at once.

  • The window under the pointer turns blue and shows its name. Click it to bring it forward.
  • Click the desk or the button again, or press Escape, to put them all back.

The desktop menu reaches it as showall. A phone has no such button.

Search for a VM, a chat, a note or a todo

The magnifier opens one box that finds VMs, chat sessions, notes and todos.

  • A VM is found by its name or its address, a chat by its title or summary, a note or a todo by its text.
  • Click a result, or move through them with the arrow keys and press Return. The box closes and the thing itself opens: the VM's window, the chat, or the note or todo in its app.
  • Escape closes the box.

Welcome

Help → Welcome… is exe in six cards: Virtual Machines, Chat, Claude Code and Codex, The Hub, Cloudflare and Apps.

The Welcome window: a night sky over a row of Macs, and under it the six features, two to a row

  • Click a card for a short account of that feature. Back returns to the six.
  • Each card says how the feature stands on this machine: ready, or what it still needs. A ready feature has a green check beside its name on the first page.
  • The card's button goes there: New VM…, the pane of Configuration that sets Chat up, Set Up… on the Claude Code and Codex card, the Cloudflare Setup Wizard, Join a Hub… until a hub is joined and the Hub after, and Extras… on the Apps card.
  • Read More… opens this manual on that feature's chapter.

On a new install the window opens with the desktop each time, until you clear Show this window when the desktop opens. That box belongs to this machine, not to the browser. An exe that was installed before the window existed opens it from the menu only.

Read and search the manual

Help → exe Documentation… opens this manual in a window of the desktop. It opens on its contents and shows a chapter at a time.

  • Click a chapter's name to read it, or turn the pages with Contents, Previous and Next.
  • A chapter's page shows the icon of what it is about beside its name: the VM's Mac, the Workspace's folder, an app's own icon.
  • A reference from one chapter to another turns to it in the same window.
  • Close the window and open it again, and it comes back where you left it.
  • It opens just tall enough to show the whole contents page, and keeps a height you drag it to.

To find something, type in the field over the page, Search the manual:

  • The contents narrow to the chapters that hold every word you typed, in capitals or not and inside longer words.
  • Each found chapter stands under its own number, with how many places hold the words and up to three lines of its text. The found words are marked in yellow, in the list and on the pages.
  • A chapter's name opens it at the top, and a line opens it at that word. While the field holds words, Contents (or Return in the field) brings the list back.
  • Emptying the field ends the search: press Escape, or click the small circled × that stands at the field's right end while it holds anything. The yellow goes, and if you opened none of the found chapters you are back on the page you were reading.

Hand exe to a coding agent

Help → Agent Skill Guide… is for handing exe to a coding agent. Its window gives the address of the skill file, which teaches an agent to create VMs, run commands inside them over SSH and publish their ports, and a prompt to paste into the agent. Copy Prompt copies it. When this browser holds an API token, the prompt includes it and the window says so.

About This Computer

Apple menu → About This Computer is the OS 9 box, about the machine exe runs on.

About This Computer: the build, the machine, its addresses, memory and disk, and a memory bar for exe and each running VM

LineWhat it says
VersionThe build of exe.
System, MachineThe operating system, the processor architecture and the number of CPUs; the machine's model and its name.
AddressesIts addresses on the local network and on Tailscale. Click one to copy it.
Built-in MemoryThe machine's memory.
VM MemoryHow much of it is allotted to running VMs.
Disk SpaceThe space free on the disk where VM disks live.
Largest Unused BlockThe memory the host could still hand a new VM.

Below the rule, one memory bar per running VM shows its allotment, scaled so the largest fills the column. exe's own footprint is the first row. The window refreshes every few seconds while it is open.

The Control Strip

The Control Strip in the bottom-left corner is OS 9's tray: a row of small modules, each with a live figure about this machine. Click a module for its menu.

The Control Strip: the Cloudflare, Tailscale, Solana ticker and agent usage modules

ModuleIts tile showsIt is there
CloudflareA lamp for the tunnel and, on a computer, the bytes a second going out.Always.
TailscaleA panel of lamps for the tailnet.On a machine with Tailscale installed.
Solana tickerA token's coin and its dollar price.Always.
Agent usage meterThe tokens Claude Code or Codex used today, or how full its plan's usage window is.Once Claude Code or Codex is installed.
ActivityA chart of CPU, memory, GPU, network or disk, and its figure now.On Linux.

The tab at the right end hides the strip down to the tab alone; click it again to bring the strip back. The arrows at its two ends scroll the row a module at a time when it holds more than it shows. This browser remembers whether the strip is hidden and what you chose for each tile.

Control Strip: Cloudflare

The lamp on the cloud is green while the tunnel is healthy, yellow when it needs attention or is not set up yet, and grey while it is still checking.

On a computer, the figure beside the lamp is how many bytes a second this machine's connector is sending out: its answers, what visitors download. A phone's tile is the lamp alone.

The menu shows:

  • The tunnel's replicas and edge connections.
  • This machine's own connections and active requests, its request rate, the bytes a second it sends and receives, its total of requests and its origin errors.
  • Cloudflare Status…, a window with the same live counters and the connector's uptime.
  • Analytics…, the traffic Cloudflare counted. See Analytics.
  • Cloudflare Setup Wizard… and Check Now.

How to read the figures:

  • Local traffic refreshes every five seconds while the strip is open on a computer, and while the menu or the status window is open on a phone. Tunnel-wide connection counts refresh every 30 seconds.
  • Bytes come from cloudflared's QUIC connections to Cloudflare, so a connector on HTTP/2 shows a dash.
  • Files Cloudflare answers from its cache never reach the tunnel and are not counted.
  • Traffic totals are for this machine's connector, include every hostname on its tunnel, and reset when cloudflared restarts.
  • Unavailable data is shown as a dash.

Control Strip: Tailscale

On a machine with Tailscale installed, the module is a panel of nine lamps.

LampsWhat they say
Tailscale's four are litThe tailnet is connected.
The four are blueThe machine's traffic leaves through an exit node.
The four are yellowSomething needs attention: a health warning, a login due.
All are dimTailscale is off.

The menu's first lines say which machine this is and how many devices are online. Under them:

ItemWhat it does
Tailscale Active, Tailscale InactiveTurn Tailscale on and off.
Log In…Stands in place of that pair when Tailscale needs a login, and opens the login link.
Desktop over HTTPSServes this desktop at https://<this machine's name>/ on the tailnet, through Tailscale Serve, and stops again. Only the tailnet's devices reach it, and over HTTPS the desktop installs as an app. While it is on, the line under it is the address.
Copy Desktop AddressCopies the desktop's address on the tailnet: the HTTPS one while it is on, else the daemon's own port where it listens on the tailnet.
Exit NodePicks one of the devices that offer one, or None. Allow LAN Access is in the same submenu.
DevicesLists the devices that are online. Pick a row to copy its address.
ServeLists the Tailscale Serve rules. Pick a row to copy its address.
Accept Routes, Use Tailscale DNS, Shields Up, Tailscale SSHSwitch each setting on or off. Rest the pointer on one for what it does.
Admin Console…Opens Tailscale's admin console.
Check NowAsks Tailscale again.

The rows from Desktop over HTTPS to Tailscale SSH are there while Tailscale is connected.

Desktop over HTTPS changes only its own Serve rule, the one for the address's root. It stays greyed, with the reason on the line under it, in two cases:

  • That address already serves something else, which the line names. The Serve submenu lists it.
  • The tailnet issues no HTTPS certificates. Turn On HTTPS Certificates… opens the admin console's DNS page, where they are turned on.

The first visit after it is turned on can wait several seconds while Tailscale fetches the certificate; exe asks the address once itself, so that wait is usually over by the time you open it.

Four changes ask first, because the desktop could go with them: turning Tailscale off or raising the shields while the desktop is itself reached through Tailscale, turning Desktop over HTTPS off from a window that came in through that address, and choosing an exit node while you reach the desktop over the local network with Allow LAN Access off.

The daemon asks the tailscale CLI on the machine and changes only those settings and that one Serve rule (GET /v1/tailscale, POST /v1/tailscale/set). It runs as Tailscale's operator user, so it needs no sudo. If it is not the operator, the menu says so and gives the command that makes it one: sudo tailscale set --operator=<user>, run once at the machine.

Control Strip: Solana ticker

The tile shows a token's coin and its dollar price: SOL, PUMP, MET or SKR. Pick the one the tile wears from its menu.

The menu lists all four with their day change, and PUMP, MET and SKR with their price in SOL as well. Its first line names the source of the prices and their time, and Update Now fetches them again.

A long run of zeros after the point folds into a small sunk count, so PUMP's 0.00003717 SOL reads 0.0₄3717 SOL, MET's 0.002404 SOL reads 0.0₂2404 SOL, and the column lines up. A price in SOL folds from two zeros, a dollar price from three.

The figures are Coinbase's public spot prices, fetched once a minute by the daemon and shared by every desktop open on this machine. Jupiter's prices stand in for a token Coinbase cannot quote, or when Coinbase does not answer; the menu's first line then names Jupiter. A Jupiter API key from portal.jup.ag goes in jupiter.api_key of ~/.exe/config.json.

The same menu turns notifications on. Notifications: turn them on, further down, says how. Open Solana… opens the Solana app on the token the tile wears: its chart (the chapter Solana). A line of Recent Moves opens the app on that move.

Control Strip: agent usage

The agent usage meter shows how many tokens Claude Code or Codex has used on this machine today. From its menu:

  • Pick the agent the tile wears.
  • Show Plan Limit puts the fullest of that agent's usage windows on the tile instead (46% wk). Show Tokens Today puts the tokens back.
  • Update Now reads the figures again.

The menu lists both agents with today's tokens and their five-hour and weekly windows. The windows stand in columns, so one agent's week is under the other's; a window an agent lacks stays blank.

Each agent's submenu has the detail:

  • Today and the last seven days, each split into tokens sent fresh, read back from the prompt cache and written.
  • The week as a column a day, with a figure on the busiest day and on today. Every day's own split is in its tooltip.
  • How full each usage window is, and when it resets.

The daemon counts from the CLIs' own logs, Claude Code's transcripts and Codex's rollouts, so every session on the machine is in, not only the ones opened from this desktop (GET /v1/agents/usage). Claude Code's usage windows are as fresh as its last reply in a Claude Code window here. Codex's are read live on the ChatGPT sign-in.

An agent has its row once it is installed and has left figures. One that is installed and has left none is named with the words installed, no usage on record. With neither agent installed, the tile stays away.

Control Strip: activity

The activity module, at the end of the strip, charts this machine: CPU, memory, GPU, network and disk, a sample every two seconds.

  • The tile shows the last minute of one of them and its figure now: 23%, or 1.2 MB/s for network and disk, both directions added. Its icon says which: a chip for CPU, a memory stick, a graphics card, a network port, a hard disk.
  • The menu shows all five as charts over the last four minutes (about two on a phone's narrow screen), each with its icon and words. Pick a row to put it on the tile.
RowIts words
CPUIts share of all cores, and its hottest sensor's temperature.
MemoryMemory in use: the total less what the kernel says is available.
GPUIts use, temperature and power, from nvidia-smi. A host with more than one card has a row for each, GPU 1, GPU 2 and on, in nvidia-smi's order. A host without nvidia-smi has no GPU row.
NetworkBytes a second in and out over the physical network interfaces.
DiskBytes a second read and written on the physical disks.

Percentages fill their chart at 100%. Rates fill it at their busiest moment in view, with two-way rates stacked. Counting only physical interfaces and disks counts every byte once: a VM's traffic crosses its tap, the bridge and the NIC.

The daemon samples only while a desktop reads (GET /v1/host/monitor). The figures start when the strip opens and stop ten minutes after the last desktop folds it away or goes hidden, and the daemon keeps the last ten minutes. It reads Linux so far; on another system the tile stays away.

Notifications: turn them on

exe can send push notifications to this device: a browser on a computer, or, on a phone, the desktop added to the Home Screen (Install the desktop as an app, further down).

  1. Click the Solana ticker in the Control Strip.
  2. Choose Notify Me of Big Moves, and allow notifications when the browser asks.
  3. Choose Send a Test Notification in the same menu to check that one reaches the device.

The menu item again turns them off. That one switch covers everything in the four sections that follow: none of them has a setting of its own.

On iPhone and iPad Home Screen apps (iOS 18.4 or later), and Safari on Mac (18.5 or later), notifications include a browser-readable fallback. An agent-finished alert, for example, can still appear and open its session if the desktop's background worker cannot run. Open the desktop once after updating so it can refresh the subscription's address. Other browsers keep receiving the same notifications through the background worker. Permission, connectivity and the device's notification settings still apply.

Notifications: big price moves

You hear when SOL, PUMP, MET or SKR makes a move that is rare for it, within an hour or within a day:

TokenIn an hourIn a day
SOL2.5%6%
PUMP5%12%
MET6%15%
SKR8%25%

There are never more than four per token in 24 hours. A move that qualifies while the four are spent is counted into the next one. Each move is also a notice on the desktop, with the time of the move, which stays until you close it; a newer move of the same token takes its place. Recent Moves in the ticker's menu lists the last eight. Click the words of a notice, and the Solana app opens on that move: the chart, the move ringed.

Notifications: weather

With notifications on, the daemon also watches the sky over the first city in the Weather app, the row your drag put on top. Reorder the Weather list and the watcher follows.

PushWhen it comes
Rain possible soon, or Rain likely when the chance is highOpen-Meteo's quarter-hour forecast puts rain in the next 60 minutes.
Next hour looks dryA fresh forecast clears the rain.
Dangerous heatA feels-like temperature of 105°F.
High windGusts of 35 mph.
Fire weatherHumidity at or under 15% meets those gusts.

The heat, wind and fire lines are the National Weather Service's own. A fire-weather hour is a red-flag hour, and it keeps the plain wind push quiet, so a Santa Ana taps once.

Each push names the city, and each hazard clears with its own easing push. There are at most four warnings per hazard in 24 hours. They speak °F and mph for a US city, °C and km/h elsewhere.

Notifications: an agent has finished

The same switch tells you when an agent is done.

PushWhen it comes
Claude Code finished or Codex finished, with the session's titleA turn ends in a session of a Claude Code or Codex window.
Chat finished, with the chat's titleA Chat run ends on its own. A VM's Agent tab starts one too.
Chat stopped, with the error that ended itA Chat run ends in an error.

For a chat pinned to a VM the push says Chat with and the VM's name. Tap the notification and the desktop opens that window on that session or chat, whether it was already open or has to be loaded first.

Some turns stay quiet:

  • A turn that ends within a minute of your last keystroke in that session from a desktop window, or of your last message in that chat. You are still there.
  • A run you stopped yourself.
  • A session that was not started from the desktop's windows. A claude run in a shell of your own carries none of the desktop's hooks.

One notification stands per session: a later turn's replaces the earlier one.

Notifications: from your own script

A script on the exe machine can send its own words the same way:

$ curl -s 127.0.0.1:7777/v1/push -d '{"title":"Backup","body":"Done."}'

It reaches every browser that turned notifications on. A title and a body are both needed.

  • A tag makes a later push with the same tag replace the earlier one.
  • A url (a path, such as /) is what a tap opens. /#show=app:Ping opens the Ping app (Open an app from a link).

Only callers on the machine itself are accepted; the same request over Tailscale is refused.

Notices: a toast that stays

A notice is a toast that waits for you. It shows above the Control Strip on every desk and phone that has exe open, and it stays there, through reloads and restarts, until you press its close box on any one of them. Stacked notices share the same small gap as the space above the Control Strip. The collapse box at its lower left folds it to a thin strip on that screen; it opens again when its words change. Claude's hub watcher puts one up when Claude's login expires or a usage limit stops its turns: it holds the posts it was given and posts nothing in their threads. A big price move of the Solana ticker's tokens puts one up too.

A script on the exe machine puts one up like this:

$ curl -s 127.0.0.1:7777/v1/notices -d '{"id":"backup","title":"Backup failed","body":"The disk is full."}'
  • A title is needed; the body is optional.
  • An id (lower-case letters, digits and dashes) makes a later notice with the same id change the one that is up, instead of adding another.
  • An at (Unix time in milliseconds) puts the time of what the notice tells of before its body, in each reader's own clock.
  • GET /v1/notices lists the ones that are up, and DELETE /v1/notices/<id> closes one, as its close box does.

Only callers on the machine itself can put one up. At most eight stay up at once; a ninth takes the place of the oldest.

On a phone

On a phone the desktop becomes a home screen of icons, and windows go fullscreen, one at a time. They cannot be moved or resized there.

  • Tap an icon to open it. It swells and fades as its window comes up.
  • Closing a window walks back through the windows you opened before it, like a phone's back button.
  • Press and hold the desktop for the desktop menu, and a window's title bar for Save a Screenshot.
  • The clock is a small clock face. Tap it and it spells the time out for a few seconds, or opens the World Clock app when that app is installed.
  • In a Claude Code or Codex window a finger drag scrolls back through the session's history, and a flick keeps it going. Press and hold the terminal for Copy, Paste and Select All: how to paste into Claude Code's composer, since the phone's keyboard has no paste key.
  • A row of keys under the terminal sends what the phone's keyboard has not: Esc, Tab, Shift-Tab and the four arrows. Esc stops Claude Code's turn or clears its composer, Shift-Tab cycles its modes, and the arrows walk a menu or the prompt history. The keyboard stays up while you tap them. Terminal windows have the row too.
  • In Todo and Weather a finger scrolls the list. To move a row, press and hold it for half a second until it tints, then drag it to its new place.
  • A picture window swipes down to close, the window under it showing through the gap as it goes. Pinch the picture to zoom it, or double-tap it; zoomed in, a finger drags it about, and a double tap brings it back. A picture opened from an issue in Projects swipes sideways to the issue's next or previous picture.

Install the desktop as an app

Over HTTPS (a Tailscale Serve address, say) the desktop installs as an app:

  • On an iPhone or iPad, use Add to Home Screen.
  • In Chrome or Edge, use the install button in the address bar.

It then opens in a window of its own, with the menu bar right under the status bar.

Running exe on more than one computer? Give each its own icon, so you can tell them apart on the Home Screen and in the browser's tabs:

  1. Choose Windows → Configuration, and click the General tab.
  2. Under Icon, click one of the 64 pictures. The tile beside them shows how it will look on a phone.
  3. Click Save.

The browser tab shows the new icon at once. A phone keeps the icon a desktop had when it was added, so remove the desktop from the Home Screen and add it again.

When the daemon is not answering, because it is restarting or the device is offline, the desktop shows an alert in place of the browser's error page and comes back by itself once the daemon does.

An app can keep a copy of what it shows on the device, to be read meanwhile; Notes and Projects do. The alert names the apps that have one and has a button for each: Open and the app's name. The app opens in a new tab, beside the alert, or in the alert's place when exe is installed as an app, which has no tabs. It shows what the daemon last had, says how old its copy is, and dims whatever would change something until the daemon answers again. The copy is renewed each time the desktop is opened and each time a notification arrives, so it is as old as the last time the device heard from the daemon.

Updates to the desktop

Updates arrive by themselves. When the daemon restarts with a new desktop or new system apps, an open desktop notices and reloads: a few seconds after the daemon is back, and at once in a tab you are not looking at. A restart that changes nothing the browser runs leaves your windows alone.

Returning to the installed app on an iPhone or iPad checks for a new desktop and refreshes the app list, even when the phone resumes an old page. If the connection is still waking up, it tries again while open. There is no need to force-close the app to pick up an update.

The reload waits:

  • While you are typing or clicking.
  • While a menu or a dialog is up.
  • For as long as there is unsaved work: text typed into a field and still there (in a closed window too), an editor with unsaved changes, unsaved Icon Editor pixels.

Blue Pencil saves its drafts as you type, so its text never holds an update. While unsaved work holds the reload back, the Apple menu shows Reload for Update to take the update anyway.

This is the open desktop catching up with a daemon that has restarted. Moving exe itself to a newer release is Software Update…; see Updating.

Icon Editor: repaint the icons

Every system icon is hand-plotted pixel art, and Windows → Icon Editor lets you repaint it.

The Icon Editor's gallery of system icons, with New Icon at its top

The gallery lists each one: the VM Mac, folders, documents, the Trash, built-in apps such as Mac OS 9, the minis in search results, even the Apple menu. Double-click one to open it in a fat-bits editor.

  • The tools are a pencil, an eraser, an eyedropper, a fill and Undo, with the Platinum palette and a custom color well.
  • Save applies the art everywhere at once. It follows the desk into every browser and every machine joined to this one, and survives restarts.
  • Revert brings the factory icon back.
  • On a VM icon, pixels painted the factory screen-green keep changing color with the VM's state.

New Icon… adds icons of your own on a 32×32 or 16×16 grid: draw them, copy their SVG for use anywhere, delete them when done. System icons can only be repainted, never deleted.

An editor left open is restored with the rest of the layout, in its position, stacking and shaded state.

Contents