Releases: basmilius/ruimte
Release list
Release 0.10.0
Ruimte 0.10.0 opens a project in a window of its own, brings every window back where it was left, and grows the project, view and machine icons to 170.
⚠️ Breaking changes
@ruimte/agents-reactnow takes@basmilius/desktop-ui0.7 as its peer instead of@basmilius/react-ui, which was renamed. An app that uses the package installs@basmilius/desktop-uiand imports from it under the new name; nothing else in its API changed.
🚀 Features
Windows
- A project can have a window of its own. New Window (Cmd+Shift+N) opens one on the start screen, and Open in New Window, or a Cmd-click on a project in the switcher, the start screen or the palette, opens that project in its own window.
- Move to New Window hands the open project to a new window. The old window goes back to the start screen, and the terminals and chats in the project keep running.
- A project is open in one window at a time. Opening it again brings the window that has it to the front.
- Closing a window never closes its project, so the sessions in it keep running.
- The windows that were open when Ruimte quit open again at the next start, each where it was left, maximized and full screen included. A new window opens a little beside the one in front.
- Settings, the theme, the machines, the defaults a new agent starts with and the choices on the usage page follow a change made in another window.
- The menu belongs to the window in front, a dialog opens as a sheet on the window that asked, and a browser node's context menu opens over its own window.
- The dock badge and the question before quitting count the agents of every window.
Icons
- The project, view and machine icon pickers offer 170 icons in 11 groups, with a search and headings that stay in view.
Chat
- The permissions picker says which mode the CLI actually runs with when that differs from the one chosen.
- A workflow that reports no progress for five minutes says so, and can be stopped from there.
- A paused queue says how to continue: send a message or choose Send now.
- The changed files card of a turn folds away behind its header.
🐛 Fixes
- Chats and tasks lost their place when an agent stopped or the machine restarted, and now keep it; a resume that did not reach the CLI is tried again.
- An approval or a question a background agent sent late opened an empty turn in the chat, and no longer does.
- A quota reset without a known time was dropped, and is now kept as the CLI reported it.
- The composer disappeared after Clear, and now stays.
- Edits to a project or a view could be lost when a save failed, and now stay until they are written; a draft made offline comes back when the project opens again.
- A name a session gave a shared node was written to the shared project file, and now stays in the private one, so an agent naming its chat no longer changes git.
- The agents' status was missing when a project opened a second time, and now shows at once.
- Skill folders that are symbolic links were not found, and now are.
Full Changelog: v0.9.2...v0.10.0
Release 0.9.2
Ruimte 0.9.2 adds launches: the run configurations and scripts of a project, started, stopped and followed from the toolbar. GPT-6.1 Sol joins the Codex models.
✨ Features
- Launches are a project's own commands for its dev servers, builds and tests. Ruimte imports them from the run configurations in
.runand.ideaand from the scripts inpackage.jsonandcomposer.json, and one dialog adds and edits them, grouped per checkout. - A launch keeps what it runs in two files like the rest of a project, and it only starts after a person on this machine approved its command, folder and environment.
- The play button in the toolbar starts the chosen launch, shows the state of the others as a dot and lists them per checkout in its menu. A checkout goes by the name of its Ruimte project or its
.idea/.name. - The Launches panel shows the output of the chosen launch, picked from a menu in its header. A launch that failed offers its output and a new start from the toast.
- A shortcut starts or restarts the chosen launch and another stops it, also while a terminal has the focus. Both sit in the new Run menu and in the palette.
- A stop sends Ctrl+C and then SIGTERM. Force stop ends a launch that ignores both.
- Agents list, read, start, restart and stop approved launches with
ruimte-context launches. A launch that nobody approved stays with the person. - GPT-6.1 Sol is the Codex model behind
sol. GPT-6 Sol stays in the list.
🎨 Styles
- The header of the Needs you card has the size of a canvas node's header.
📦 Packages
@ruimte/agentsships GPT-6.1 Sol in its Codex catalog.@ruimte/agents-reactlets a host draw its own chips for a chat's sub-agents over the composer, and takes@basmilius/react-ui0.4 as its peer, so an app on a newer version no longer installs a second copy of it.
Full Changelog: v0.9.0...v0.9.2
Release 0.9.0
Ruimte 0.9.0 shows what a sub-agent is doing, gathers every open project's questions in one place, and picks up new models without a new release. Claude Sonnet 5.5 is the new default.
✨ Features
- A sub-agent shows the model it runs on. A bar over its conversation shows its state, time, model, kind, tokens and tool calls, with its task folded away behind it. The composer stays beneath it, so the chat's approvals and questions can still be answered.
- Needs you lists what waits in every open project, grouped per project. Rest the pointer on a waiting chat to answer its question or approval from the sidebar without opening the view. A setting turns this off.
- The maximize shortcut makes a node fill its cell while the camera stays put. The same key, the menu item or the restore button in the node's header brings it back.
- A new Font section in the settings picks the interface font and turns ligatures on or off.
- New models reach a machine from the address book without a release. The machine checks for them at startup and every six hours, and
--no-model-fetchturns this off. - Claude Sonnet 5.5 is the default Claude model and answers to
sonnet. Sonnet 5 stays in the list. - A model's badge in the pickers is set in capitals.
📱 iPhone and iPad
- The sub-agent and background chips open in a sheet.
- A sub-agent's conversation keeps the chat's composer beneath it, where its approvals and questions come up.
- The chat fades out behind the composer, and the stop button animates in and out beside it.
🐛 Fixes
- The iPhone app no longer hangs after approving a prompt while sub-agent chips sit in the composer.
📦 Packages
@ruimte/agent-contractsdescribes a sub-agent's model and the model catalog the address book serves.@ruimte/agentslets a host swap in a newer model catalog while it runs, never one older than the shipped copy, and ships Claude Sonnet 5.5 as the default. It reads a sub-agent's model from its call and its first answer.@ruimte/agents-reactdraws the sub-agent bar and model, and sets a model's badge in capitals.
Full Changelog: v0.8.0...v0.9.0
Release 0.8.0
Ruimte 0.8.0 plays sound and video from a machine, shows PDFs page by page, and loads a long chat as you scroll. On the iPhone the composer caught up with the desktop.
✨ Features
- The file viewer plays sound files and streams video in pieces, so a large video starts at once instead of loading whole. Over a direct connection the bytes now travel as binary replies, and a video reads ahead of where it plays.
- PDF files open in the file viewer, rendered page by page as you scroll.
- The file viewer recognizes AVIF, ICO and BMP, and says up front when a HEIC, HEIF or TIFF file cannot be shown.
- A chat loads earlier messages as you scroll up instead of behind a button, and keeps the message you are reading in place. Finding text and jumping to a bookmark load what they need.
- A working agent is marked with a spinner; an idle one carries no mark.
- The diff tab's view controls moved into its overflow menu.
📱 iPhone and iPad
- A redesigned composer, brought up to the desktop one, that moves with the keyboard.
- Pictures, PDFs and sound files open in views of their own.
- Videos play in the full system player, stream from the machine in pieces and survive a reconnect halfway.
🐛 Fixes
- A Claude chat set to a 200k window compacts again when your own Claude settings turn auto-compact off. It used to grow toward the model's full window.
- Ctrl+V in a terminal pastes the local clipboard on Windows and Linux.
- A direct connection recovers faster from a lost packet.
- A file of any size can be read from a machine.
📦 Packages
@ruimte/agentsturns auto-compact on for a 200k Claude pick.@ruimte/agents-reactreads a chat's thread in pages and loads the page before while scrolling.
Full Changelog: v0.7.3...v0.8.0
Release 0.7.3
A patch release: queued chat messages go out again after a background subagent asked for approval, and the libraries on npm gained what another app needs to host Ruimte's chat.
🐛 Fixes
- A chat no longer stays on working when you write while a background subagent waits for your approval between turns. Your message used to be answered, but its turn never closed, so anything you queued after it waited until another subagent finished.
- A canvas lock now stays with its view when you switch to another view and back.
- Long paths in a message wrap inside the bubble instead of running out of it.
- Relative times such as "5 minutes ago" are written in the language of the interface.
📦 Packages
@ruimte/uiis no longer published. Its components moved to their own library,@basmilius/react-ui, which the app and@ruimte/agents-reactnow draw with.@ruimte/agentsnow holds tasks, the outbox, lineage, messages between agents and the registry behind a context CLI, so an app can run them without a machine. A host can also give a chat folders outside its working directory.@ruimte/agents-reactlets a host set the composer's placeholder, add a control to the composer, show cards of its own in the thread and draw a header over every reply.
Full Changelog: v0.7.0...v0.7.3
Release 0.7.0
Chats can run on the model built into your Mac, notifications only come when an agent needs you or you asked for one, and the chat itself is now a set of packages another app can build on.
🚀 Features
Apple Foundation Models
- Run a chat on the language model on your Mac. Turn it on under Settings, Providers, Apple Foundation Models, then pick it in a chat's provider menu. It is off by default and needs Apple silicon, macOS 26.4 or later and Apple Intelligence.
- The model stays on the Mac. It reads and edits project files, runs shell commands you approve, asks questions, searches the web and uses your MCP servers. A web request or MCP tool can send data to its service once you approve it.
- Turning it off stops every running Apple chat on that machine and withdraws the approvals it waits on.
Notifications
- Ask an agent to let you know when it is done, and it sends one notification at that moment, to the desktop and to your iPhone. Clicking it opens the chat or terminal it came from.
Packages
@ruimte/ui,@ruimte/agent-contracts,@ruimte/agentsand@ruimte/agents-reactare published on npm besideruimte, so another app can run Ruimte's chat, providers and usage page without a machine.
🐛 Fixes
- A turn that ends no longer sends a notification by itself. You hear from Ruimte when an agent needs you or when you asked for it, and the "Tell me when a turn ends" setting is gone.
Full Changelog: v0.6.0...v0.7.0
Release 0.6.0
Claude Code and Codex can each run under more than one account, every chat and terminal agent picks its own, and the settings dialog is rebuilt around them.
🚀 Features
Accounts per CLI
- Add more than one account to Claude Code and Codex under Settings, Providers. Each account is a config folder of its own that the CLI signs in to by itself, in a terminal on the machine. Ruimte never reads a credential.
- An account can link a folder you already have, gets a name and an accent color, and keeps environment variables of its own. A secret value stays in the machine's keychain and never goes back to a client.
- A new Codex account shares conversations, config and skills with the others, so a chat can move between accounts.
- Pick the account a chat runs under from its run settings. The account shows beside the model, in the node header and in the fork dialog, and each CLI has a default account for new chats and agents.
- A terminal agent runs under the account its launch names, and opening it as a chat keeps that account. An agent's children run under the account of their parent.
- When a chat stops on a usage limit and another account has room, the dock offers to continue there, in place or in a fork. Nothing switches unless you press it.
- Usage shows the plan limits of every account, and the cost and tokens narrow to one account.
- On the iPhone, the usage page and widget show every account, and the model menu names the account of a chat and lets you pick another.
Settings
- A larger settings dialog, with its sections grouped, your account at its foot and a search (⌘F) that jumps to the row it finds.
- Providers lists every CLI with its accounts beside them, and Account lists each machine the same way.
- About opens the release notes, also where the app cannot update itself.
- Your Ruimte account shows the name GitHub or Apple gives it, and a GitHub account shows its own picture.
Terminals
- A terminal shown on two clients takes the size of the one you work in, and every client draws that grid, also the iPhone.
- vim, tmux and a CLI over ssh can copy to the clipboard of the machine in front of you.
⚡ Performance
- Each settings pane loads on its own when you open it.
🐛 Fixes
- Resuming an agent in a terminal no longer types into a program that took over the shell, such as vim or ssh.
- An agent that waits on you keeps showing it while one of its subagents works on.
- Hooks install through a settings file that is a symlink, and leave its permissions alone.
- A dialog opened over another dialog sits above it.
- A focused row in a scrolling settings list keeps its focus ring.
- A chat that went on in a fork after a limit no longer resumes the original at the reset as well.
Full Changelog: v0.5.0...v0.6.0
Release 0.5.0
Agents that delegate work now handle usage limits, background work and waiting children, and a chat shows what its sub-agents and workflows are doing.
🚀 Features
Usage limits
- A turn that stops on a usage limit or an overload says which limit it hit and when it resets.
- Resume at reset takes a limited chat up again once its limit resets, or a few minutes after an overload. It is off by default: turn it on for the machine under Settings, Agents, or per chat.
- A sub-agent that stops on its limit pauses its task instead of failing it. The task shows as paused until the reset, and its parent sleeps on until the sub-agent finishes.
Delegating work
- A task finishes only once the sub-agent's background work is done: its own sub-agents, a Claude workflow, an agent Codex spawned, or a background command. A background command holds the task for at most 30 minutes, since a dev server never ends.
- A sub-agent that waits on a question or an approval leaves its parent a note, and the parent can answer the question with
ruimte-context answer. - A parent can read a sub-agent it opened itself without a line between them, and a read thread shows the request id of every question and approval.
Chat
- Attach another chat of the project to a message with @. The agent that gets the message can read that conversation.
- An agent that a sub-agent opens shows as a row under its parent, and so does an agent Codex spawns, until it completes.
- A Claude workflow's row keeps running until the workflow ends, and lists its phases and the agents in each. Pressing an agent opens its transcript.
Computer use
- You can keep working in Ruimte while an agent operates it. Letting an agent into Ruimte is your own risk, and the card says so.
⚡ Performance
- A long chat no longer rewrites its whole record on every change. In a long run with five sub-agents the daemon wrote 448 MiB instead of 15 GB, and its memory grew half as fast.
🐛 Fixes
- A terminal's permission prompts stay in the terminal. Ruimte shows that it needs you and leads you there, and no longer holds the request for an answer from the app. A chat still answers its approvals from the app and from a notification.
- A terminal opened as a view of its own shows that it waits for you above the terminal.
- A Codex terminal starts again when its start line runs past what the terminal accepts in one go.
- A Codex terminal runs outside Codex's shared background server, so its status no longer lands on another node after a restart.
- A background agent's question or approval stays open after the turn that launched it ends.
- The sub-agent pill counts only running sub-agents.
- A streamed section title appears together with the block under it, on the desktop and on the iPhone.
- A menu command runs even when the page never had its key.
- Computer use finds elements a container clipped out of view, and scrolls Chromium apps in the background.
- Project settings and the paths linked into new worktrees are gone. A new worktree installs its own dependencies.
Full Changelog: v0.4.1...v0.5.0
Release 0.4.1
A consistency pass over the interface: buttons, fields, menus, dialogs and panels now look and behave the same everywhere.
🐛 Fixes
- Every keyboard focus indicator is the same accent outline, and every text field is drawn the same way, including inline renames and the multiline field.
- Text buttons share one set of sizes, with a smaller size in headers.
- Icon buttons come in fixed sizes with a matching icon, and every panel and dialog header closes with the same button.
- Disabled controls dim the same way.
- A tick in a menu sits before the label, as a bare tick for one of several and as a box for on or off.
- Dialogs share one width, one maximum height and one set of text styles, with the main action on the right.
- Side panels share one header. Every empty panel or list shows the same empty state, and every error is announced to screen readers.
- Labels use sentence case and a real ellipsis.
- The settings page for machines and your account is called Account.
- The voice waveform's activity labels are translated.
Full Changelog: v0.4.0...v0.4.1
Release 0.4.0
Agents can now operate other apps on your Mac and the devices on your canvas, and a terminal command from a project file waits until you approve it.
🚀 Features
Computer use
- Agents can operate another app on your Mac with
ruimte-context computer. They read it through accessibility and window captures, and act with a cursor of their own. Computer use is off per machine until you turn it on in Settings, which walks you through the Accessibility and Screen Recording grants. - An agent works only in an app you let it into, this time or always. Settings lists these grants and lets you take one back.
- A session bar and a menu bar item show what the agent does. ⌥Space pauses, ⌥⎋ stops, and a deliberate move of your own takes over.
- Agents work behind your windows unless a call asks for the front, and their cursor stays visible there.
- One agent holds the Mac at a time. Another one is refused, or waits its turn with
--wait. - The node whose agent operates the Mac is marked, with pause, resume and stop. Its approval cards show in the chat and in the prompt stack.
- While an agent operates Ruimte itself, the window holds back your answers to cards and prompts until you pause or take over.
- Agents can find elements, read them, wait for them and drag, and
--stateanswers with what changed since the last look.
Devices
- An agent can see and operate a device node over a line with
ruimte-context device: screenshots, taps and typing on simulators, Android devices and iPhones. - On a simulator or an Android device the agent can read the elements on screen and tap one by number.
- A device node an agent operates shows a strip with pause and take over.
Terminals
- A terminal only runs a command from a project file after a person on this machine approved it for that node. Until then the shell starts without it and offers to run it, on the desktop and on iOS.
Chat
- A file attached to a message shows as a card with its type.
- Quoting a selection in an answer now goes through a button instead of happening on select.
- MCP approval requests from Codex arrive as approval cards.
Files
- Diffs follow the chosen code theme, Ruimte Light and Dark included.
⚡ Performance
- The workspace, its panels and its dialogs load as chunks of their own and are fetched ahead once the app is idle, so the first load is smaller and a panel still opens at once.
- Panning the canvas no longer routes every line again, and dragging or a streaming answer no longer redraws the palette and the sidebar.
- A terminal's WebGL renderer loads with the first terminal that gets a context.
🐛 Fixes
- A revoked key stays shut out, and the local secret no longer travels in URLs.
- A shared project file can no longer set a permission mode, a session or a folder outside the project.
- The broker limits ICE requests per address and hands out TURN credentials for an hour.
- The desktop window, browser pages and webviews get only the permissions they need.
- A terminal paints its screen before its stream, screen and stream never overlap, and a reload reattaches terminals four at a time.
- A machine whose ping goes unanswered for two intervals reconnects.
- A web session refreshes in one tab at a time, so a spent token no longer signs every tab out.
- Resolving a conflict keeps hand edits, encodings and moved files safe. A worktree merge checks its target again, and cancel stops it between steps.
- Two agents never share one worktree.
- Saves and reloads of a project stay in step with the disk, and a save conflict stays on the newest version and asks before leaving it.
- Undo on the canvas stays in step with other writers.
- A chat CLI ends with its whole process group, and a crashed chat keeps the reason.
- A message or task for an agent that was just ended no longer starts it again.
- A sub-agent shows again when a message wakes it.
- The desktop app keeps its session key when the keychain will not decrypt it.
- After an update, a missing chunk reloads the page once instead of breaking it.
- Every surface of the window has its own error boundary, so one failing panel no longer takes the workspace down.
- Connector lines no longer run under the node they leave.
- The command palette lists matching views first.
- Dictation asks for the microphone first and never shows a raw failure.
- The Voice Control activity log is written in the interface language.
- The iPhone app follows chat status instead of polling, sends terminal input typed during a write together, and accepts agent kinds from a newer machine.
Full Changelog: v0.3.0...v0.4.0