What each version changed.
The same notes the app shows after an update (Help → What’s New), newest first. Installed apps update themselves from GitHub releases; the server updates with robion-server update.
0.20.38
- Slack events reach your rules in the order they arrived. Each message used to resolve its names on its own, so a reply to a thread could overtake the message before it when that one's sender was not in the name cache yet — and a thread continued as one task (0.20.36) would have had its follow-ups typed in the wrong order. Events are now handled one after another; a lookup that times out delays the next event by the client's timeout, never blocks it.
- task states hold again on Claude Code 2.1.293 and newer. In a session started on those builds the hook events Robion read the state from (a prompt, the end of a turn, a permission request) no longer reached its hooks module, so a task showed "working" only while a tool ran, every finished reply came up as "interrupted" a few seconds later, and a permission dialog never showed as "waiting". The module now builds those events from Claude Code's own engine events — the start and end of a turn, each tool call and its verdict, subagents, the session's end — and the states, the phone's cards and the Inbox follow them as before. A permission dialog is read from Claude Code's session file within two seconds, and the phone answers it by typing into the terminal as the desktop does; a subagent's tool call no longer closes the main agent's open question.
- a prompt typed while the agent works no longer leaves the task on "done" through the whole reply: Claude Code announces such a prompt the moment it is typed and says nothing more when it takes it up after the running turn, so the task went "done" at that turn's end and stayed there. The engine's own "turn started" now moves the task to working. And a turn's "done" waits 400 ms for a turn on its heels — a finished background task waking the agent up, a queued prompt — before the phone is pushed, the Inbox gets its item and the timeline its line: sixteen such "done" pulses sat in the logs since August, each followed within a tenth of a second by the agent working on.
0.20.37
- the phone on a tablet held upright: the task fills the display and the overview slides over it. A display 768 to 1023 px wide (a tablet upright, a browser window) used to dock the overview next to the task as the landscape layout does, and the fixed 340 px list left the task less than three fifths of an 800 px tablet. Now the task takes the whole width and the header's "‹ back" becomes "show the overview" (the panel icon): it slides the overview, bottom bar included, over the task from the left edge — a swipe from the left edge does the same. Picking a task or a tab of the bottom bar closes it; so does a tap on the dimmed task. From 1024 px (a tablet on its side) the overview stays docked as before; under 768 px the phone shows one screen at a time as before.
0.20.36
- side questions from a selection: select text in a Claude Code terminal (a drag, or ⌥-drag) and an "Explain this" chip appears under it — one click asks "Explain this: “…”" on the side and opens the window with the answer on its way. With a selection, the header button and Task → Ask on the Side open the window with that question prefilled, to edit first. The question follows the app's language; ⚙ → Application → "Side question from a selection" sets your own wording ({text} = the selection), to ask and be answered in another language. The ⌥⌘A shortcut of 0.20.35 is gone: the chip and the header button are the way in.
- the desktop in a browser: the whole Robion window — rail, terminals, tree and git, every panel — as a web page the server serves at /d/. ⚙ → Remote access → "desktop in a browser": "open in a browser on this Mac" opens it in your default browser, paired at once; with remote access on, "link for another device" mints a one-time link for a browser or a tablet in your tailnet, where the page can also be installed as an app. Agents, terminals and files stay on the server; a browser tab is a view, like the window. A Linux server serves it too (robion-server pair --desktop), so a headless box no longer needs a Mac in the loop.
- in a browser the chords a browser keeps for itself have a Ctrl form: ⌃⇧T new task, ⌃⇧N new terminal, ⌃⇧W close panel, ⌃, settings, ⌃0 overview and ⌃1–9 tasks; ⌘/ lists them. What a browser cannot do stays with the desktop app: the Finder, dragging files as paths (they move as bytes, as to a remote server), the SpaceMouse, interface size (use the browser's zoom), pairing other servers, the agent's preview screenshots and element picks (a browser-only session gets "preview tools need the desktop app"), and tunnelling a dev-server preview from another machine (the panel shows the ssh -L command instead).
- automations for a Slack thread: task.create takes a dedupeKey (for Slack the channel and the new thread key) — the first message of a thread starts a task, every reply is typed into that task as a follow-up while it is open, and a closed task lets the next message start a fresh one; a continued task does not count toward "Tasks per day". Conditions can say not / not_in ("everyone except me"), and "me" works for Slack too once ⚙ → Automations → Slack → "Your Slack member ID" is filled in — empty, such a condition never holds, so a rule cannot fire on your own messages by accident.
- an agent testing a rule now learns first whether the rule's conditions would let the event through and which condition turns it away; it can read one rule's full definition, and manage the rules of another project of the same server without a task there. A rule an agent re-sends with conditions only added keeps its switch (it can fire on fewer events, never more); a changed trigger, action or condition still switches it off until you enable it again. The dead force flag of task.create is gone. A project added from a folder that is no git repository no longer starts with "own worktree" for automated tasks, which failed there every time.
- phone chat: the end of a turn no longer goes missing once the session's transcript is big. Since 0.20.28 the chat lays the rows the session reports live behind what the transcript file holds, but the file was read through a 2 MB window at its end — a transcript full of the screenshots an agent looked at (half a megabyte a row) left most of the chat outside it, and those rows were taken for newer than the file and laid after its newest ones: the chat ended with an old tool call while the terminal showed the reply. The rows are in order now, and the file is read as it grows (32 MB at first, then only what was written since), so such a session keeps its history in the chat and a re-read no longer parses the whole window.
0.20.35
- side questions: ask about a task beside its conversation while the agent keeps working. On the desktop a Claude Code terminal has "ask on the side" (⌥⌘A, also Task → Ask on the Side and ⌘K) — a small window over the terminal with your questions and the answers; on the phone the task has an "aside" tab. A fork of the session answers from what the conversation already holds, the reply being written at that moment included, with no tools, and neither the question nor the answer is written into the agent's conversation. Follow-ups know the thread; desktop and phone share it, and it lasts until the task closes or the server restarts.
- phone: a message sent while the agent is busy no longer holds back what is sent after it. Until the agent took the first message up, the next one fell back to being pasted into the terminal and the notes shown in the terminal's corner were lost.
- lists in rendered markdown have their bullets and numbers back: in the phone chat and its aside tab, and in the desktop Markdown view, a Jira ticket and a side answer, the items were only indented.
0.20.34
- phone chat: it now holds what the terminal shows of the agent. The short notes an agent leaves between tool calls (what it found, what it does next) were missing — Claude Code stores them as thinking blocks with text and the chat left all thinking out; they are agent rows now
- phone chat: coming back to a chat that moved on by more than a page while the phone was asleep or on another screen, the newest page shows whole and "older messages" loads the rest in order. Before, the rows from the last visit stayed in front with a hole behind them that could not be loaded, and a reply could stay a second time at the top
- automations: "Tasks per day" counts only the agent tasks rules start; a rule that presses a run button no longer uses the limit up — a few cron rules pressing buttons could block every task from the afternoon on
0.20.33
- rail: the selected project is a rounded card with a hairline frame in the project colour instead of the bar on the left edge, so it no longer blends with the rows where an agent is at work; the pulse of a working project and the hover have the same rounded shape. OVERVIEW, BOARD, INBOX and AUTOMATIONS get the same frame when open
0.20.32
- phone: coming back from a task, the overview stands where you left it instead of jumping to the top
- terminal splits: a new terminal from ⌘D / ⇧⌘D takes the keyboard right away — with two or more terminals in the tab the focus used to stay nowhere after the split, so the first keystrokes were lost
0.20.31
- rail and phone overview: the INACTIVE · n group folds and unfolds per server — a click on the header under This Mac no longer shows the inactive projects of every paired server as well; each group remembers its fold on its own
- file editor: line wrapping per file — "wrap" in the header or a right-click in the text → "wrap long lines" switches it for this file only (a .env with long values, a log); the choice sticks with the tab across a relaunch and ⚙ → Appearance stays the default for the rest. The right-click menu also offers find…, go to line… and open in editor
0.20.30
- phone chat: while the agent works and nothing is streaming yet, a "the agent is working…" bubble with pulsing dots sits at the foot of the chat, where you look after sending a message; the reply takes its place
0.20.29
- phone terminal tab and read_terminal: words no longer run together where a line wrapped in a narrow pane — the screen is now read cell by cell (spaces are spaces, colours stay), instead of a replay stream that wrote untouched cells as cursor moves
0.20.28
- Robion now watches a session from the inside: its Claude Code plugin carries a hooks module (Claude Code "mods", 2.1.287+) that every session Robion starts loads. Agent states, the chat, the context in the rail and the answers to permissions come through it — nothing is written into ~/.claude/settings.json any more, and the hooks and the status line shim an earlier Robion put there are removed once at start (a backup next to the file)
- phone: the chat is live — a prompt, a tool row, a result or a reply shows the moment the session stores it, and the agent’s reply appears while it is being written (plain text with a cursor, the rendered reply replaces it). The transcript file only supplies the history
- an interrupted turn (Esc, "No" on a dialog) reads "interrupted" at once — the session reports it; the transcript probe is gone
- a task whose session never reported from the plugin (an older Claude Code, a session started by hand) says "Robion’s hooks module did not load in this session" under the terminal and above the phone chat instead of looking idle; the hooks banner, ⚙ → Agents → Claude Code hooks, ⚙ → Servers → install hooks and the status line shim toggle are gone
- phone: dividers the agent drew across the wide desktop terminal are shortened to the phone’s width on the terminal tab — one line, not five
- the agent’s question (AskUserQuestion) is held inside the session like a permission while nobody at the desktop shows the pane: the phone’s answer becomes the tool’s result and no dialog is drawn (keystrokes only when the dialog is already on screen); while a permission or a question is held, the terminal’s status line says "robion: the permission / the question is on the phone"
- a message from the phone, a controls button or an automation reaches the session as a prompt of your own through the hooks module — no paste, no pause, no "pasted text" marker; slash commands and shell panes keep the paste
- /robion in the terminal opens a pane with the task as Robion sees it (folder, branch, ports, controls panels with their values, who watches); a toast in the terminal says when the phone allowed, denied or answered
- parking a task: the session writes its own handoff note over the context it already has (through the hooks module) before it leaves — faster, no second claude; the headless fork stays as the fallback
0.20.27
- rail: a project with an agent at work pulses as a whole row, in step with its breathing state cells — a glance at the rail says which projects are busy
- rail and phone: projects nobody touched for 14 days (no prompt, no new task, no agent at work or waiting) fold into an INACTIVE · n group at the bottom of the list; click the header to show them. ⚙ → Application → Inactive projects sets the days (0 = never fold). The rail’s group opens by itself while the selected project sits inside it; the phone remembers the fold per device
- tree: new file and new folder as icons in the tree’s search row (next to the selected file, or in the root), the name dialog says which folder; a folder just made shows at once even while empty; drag a row onto a folder to move it there (nothing is overwritten, a folder cannot go into itself), onto the tree background to move it to the root; files deleted on disk but not yet staged no longer linger in the tree
- phone: a project row is a raised band and its tasks hang indented under it on a guide line, so a task no longer reads as a project and vice versa
- a task waiting on a background shell — a CI poll loop, a build started with run_in_background — stays “working” with “⏳ shell still running: <command>” until the turn the finished shell wakes up ends, instead of reading “done” and flipping back to “working” minutes later; the same for workflows, teammates and cloud sessions. Only a monitor Claude Code arms by itself (live updates of a published artifact) leaves the task done. A dev server left in the background keeps the task working until it is stopped
- fixed: a task read “asking for permission” until the next prompt — a permission notification that arrived after the dialog was answered (or after the turn ended) counted as a new wait, and a request auto mode’s classifier refused stayed open past the agent’s reply (the phone showed it as waiting for you while the agent was done)
- phone (English): an idle task reads “waiting for a prompt”, like the desktop and the TUI, not “waiting for input” — that sounded like the agent had a question while it had simply finished
0.20.26
- new tasks failed with “posix_spawnp failed” on a Mac that had run Robion for a couple of weeks — on the desktop, from the phone and in automations alike: the pane host leaked one pseudo-terminal for every pane it ever started (a bug in node-pty’s spawn on macOS; a Mac has 511), until no terminal could start anywhere. Fixed with node-pty 1.2.0-beta.15; after the update the status line offers replace now… for the old host, which frees the leaked terminals once the sessions have moved
- ⚙ → Agents → Pane host → restart…: replaces the pane host at any time, not only after an update — the same park-and-resume, with the progress in the status line
- phone: a folded project with an agent at work reads blue in its one-line summary, like the running dot on its rows
0.20.25
- Slack as an automation source: a message in a channel the Robion bot is a member of, the bot mentioned, an emoji reaction, or a direct message to the bot fire the new rule triggers slack.message, slack.mention, slack.reaction and slack.dm the moment they happen — Slack pushes them over one outbound connection (Socket Mode), so nothing polls and no model runs until a rule says so. A rule picks its channels in when (channel_name), thread_reply: false means new threads only; events carry the readable text, the author, the permalink and the thread. The colleague’s case: “a new thread in #devops → a task that triages the request”
- ⚙ → Automations → Slack: paste the app-level and the bot token of a workspace-internal Slack app (the hint lists the scopes and event subscriptions); both are tried against Slack before the keychain sees them. The state says which workspace is connected and in which channels the bot listens — the list follows /invite and tells you when a scope is missing
- automations_help tells an agent where the bot listens, so a rule written with /robion:automate names only channels that exist
0.20.24
- the agent’s question (AskUserQuestion) no longer turns into an empty “the agent asks for permission” card with allow / deny on the phone and in the rail when the session asking is not the one the pane started with (the Claude app or Remote Control continuing the conversation as a fork, or the terminal after a resume whose start Robion missed): the cards stay, and the dialog’s own “needs your permission” notice keeps the question state instead of replacing it. Answering reads the terminal first — when the dialog is there the answer goes in, otherwise the phone says the session that asked runs in another client and to answer there; before, allow typed 1 into the terminal
- the question sheet on the phone ends with “answer in the terminal”, which opens the terminal tab with its key bar
0.20.23
- the pane host no longer shows up in the Dock: naming it through process.title made macOS check the process in as a foreground application of the app bundle it runs from (a Dock entry “Electron” or “Robion” with a generic icon, since the host runs on Electron’s Node); the name now comes from the spawn instead, ps still says robion-panehost
0.20.22
- answering Claude Code’s own “Read outside the working directories” question (auto mode, the first Read / Grep / Glob outside the project) from the rail or the phone now picks the right option: allow = “Yes, but ask again next time”, allow and don’t ask again = “Yes, and keep allowing”; before, “don’t ask again” typed the dialog’s second key, which blocks such reads in every project for good. Since Claude Code 2.1.284 every new task starts in auto mode unless permissions.defaultMode says otherwise — the manual (/robion:help, tasks) says how to get manual back
- Sonnet 5.5 (claude-sonnet-5-5, 1M context) in the model choice of the Steward and of automation rules
0.20.21
- Vocab („Slovíčka") is gone again — the word lookup, the quiz cards, ⚙ → Vocab, the vocab.quiz action and the vocab_add / vocab_list tools of 0.20.19–0.20.20; it lives on as a separate app. A vocab.sqlite left in Application Support is untouched and can be deleted by hand — protocol 37
0.20.20
- Vocab translates in well under a second: DeepL with a free API key (⚙ → Vocab → DeepL API key, kept in the keychain) or the keyless MyMemory, instead of a headless Claude run that took four seconds and about a cent a word; Claude now only adds the example sentence and the note, in the background and only with “Example and note” switched on — protocol 36
- the Vocab shortcut is recorded, not typed: click the field, press the chord (by physical key, so a Czech layout records the digit row as digits), Esc cancels
- quiz cards come from Vocab’s own clock across every project — ⚙ → Vocab → “A card while waiting” (minutes, default 3) and “A batch at” (cron, with a count) — no automation rule on a project any more; the two vocab starter rules are gone, the vocab.quiz action stays for custom rules
0.20.19
- Vocab („Slovíčka"): a global shortcut (⌃⌥E, ⚙ → Vocab) opens a small window over any app — type or paste a word, Enter translates it (a headless Haiku run, a fraction of a cent) and saves it on this Mac; quiz cards with four options then appear in a strip above the workspace when nothing needs you (starter rules “Waiting on agents → a word to review” and “Weekday morning → five words”, the new vocab.quiz action), scheduled in Leitner boxes; agents save words with vocab_add; off by default — protocol 35
- a downloaded update waiting for a restart no longer stops the app from looking further: the quiet check and Check for Updates… find a newer release and download it in place of the waiting one (a cockpit left open for days used to install the stale version first and only then learn of the next); the app menu keeps Check for Updates… next to Restart and Install X
- TASKS no longer lists a detached worktree outside the worktrees folder that no task runs in — the release build under the temp folder showed up as "being created… · by hand" and TREE and GIT answered "… is not a checkout of robion" on a click; a worktree added by hand anywhere now opens in TREE and GIT
0.20.18
- a relayed server counts as connected on the phone only once it has said hello on the current protocol: while a box updates itself the phone no longer asks it and shows “the server … is not connected (incompatible)” once a minute — the server strip says “another version — waiting for its update” and stays quiet
- robion-server update on a Linux box retries a download that fails (GitHub answered a freshly published release with a 500 and the box gave up, so both boxes stayed on 0.20.16 while the Mac read “updating to 0.20.17…”); a download that still fails says so in update.log
0.20.17
- the phone sees every server the Mac knows: a server paired in ⚙ → Servers on the Mac now shows up on the phone with its projects, under a strip per server (this server first, then each relayed server by name and state — connected, connecting…, unreachable — retrying, not paired on the Mac, another version — waiting for its update), and its tasks open, answer, chat, take photos, show changes and controls like the Mac’s own. The phone still pairs once, with the server that serves it: that server holds the connections to the others (the hub, protocol 34) and relays them — their pushes arrive from it with the server’s name after the task (“build · lab”), no push while the Mac shows that pane. Nothing to set up on the phone; the Inbox, the board, automations, the Steward and the limits stay the home server’s. ⚙ on the phone lists the relayed servers with their state and version
0.20.16
- the phone’s overview is easier to read: every project is a large row with its icon, name and one line summing up its tasks (“1 waiting for you · 3 waiting for input”, amber when something needs you); a tap on the row folds the project (remembered on the device), fold all projects / unfold all projects sits at the bottom next to new project, and controls and new task are icon buttons on the right; task titles grew as well. A bottom bar — overview, inbox (with its count), board, settings — replaces the ⚙ and the inbox pill in the header, so the board and the inbox are one tap away instead of hidden behind settings. The phone’s board caught up with the Mac’s: a card opens as a sheet with its note, project, origin and the state of its task, and offers start a task (Claude Code in the card’s project with the card as the first prompt), → doing / → done, edit, delete; a new card takes a note and a project; done shows the last week, the rest folds into “+ N older”. Settings on the phone gained appearance on this phone (theme: server / system / dark / light, text size: smaller / normal / larger — stored on the phone, so it can be light in daylight while the Mac stays dark), limits (each subscription window as a bar with its reset time and the account) and reload the app next to the versions. A message sent from the phone no longer hangs as “sent · waiting for the agent” for good: Claude Code stores a paste of 20+ characters — every prompt Robion sends — inside <pasted_content> tags, which neither the phone nor the chat recognised; the server now strips them (the chat shows the prompt as typed), the bubble goes when the agent’s turn ends or after 20 minutes, a tap hides it, and a slash command such as /clear (never a chat row) shows no bubble at all
- automations react to a failed GitHub Actions check: add checks:failure (Robion’s own qualifier; GitHub’s status: only sees commit statuses) to a pull request query — “is:pr author:@me is:open checks:failure” with an issue.updated trigger — and the rule fires when a check run fails on one of your open PRs: once per failed run, so a PR going green → red fires, a PR that stays red does not, and a PR red before the rule existed never does. The brief can name the check (${issue_check}, ${issue_check_conclusion}, ${issue_check_url}). A fine-grained token needs Checks read for it (classic repo has it) — the hint under GitHub personal access token says so
- closing the window no longer quits Robion: it hides into the Dock and the server keeps running, so automations, the Steward’s schedule, pushes and the phone work with the window closed; the Dock icon brings the window back, Robion → Quit (⌘Q) ends it as before, and Robion → Open at Login starts it after a reboot (a sleeping Mac still runs nothing, a remote server does)
- an automation’s run action now waits for the button’s command and fails when it does: a check that exits non-zero is a failed run in the Inbox and on the phone, quoting the last lines of its terminal, instead of “pressed, ok” while the error sat in a hidden shell tab
- the server keeps an eye on what Claude Code sends its hooks: a field or a value the hooks docs do not describe is noted once in hook-drift.json (and in telemetry), so a change in Claude Code shows up before a symptom does
- the ✓ reviewed button, the “awaiting review” header in the GIT section and on the phone, and the Review queue limit (⚙ → Application) are gone: nobody pressed the button, so the limit never counted anything and the confirm “N tasks awaiting review — create another anyway?” only got in the way; the list “since the last agent turn” and the agent’s request_review note stay
- a remote server on an older protocol updates itself: after a Robion update the desktop no longer parks the box as “update the server (vX)” and waits for robion-server update over ssh — it tells the box to update first (⚙ → Servers reads “server vX” + “updating to Y…”, then “restarting…”) and reconnects when the box is back; the red “update the server” stays only for a box this desktop cannot update (a source install, a box newer than the app, a failed build)
- the sandbox caveats in NEW TASK OPTIONS now say that a project’s own sandbox.excludedCommands (.claude/settings.json, settings.local.json) do not apply in a session Robion starts: Claude Code 2.1.282 ignores them under Robion’s allowUnsandboxedCommands: false, so such exceptions belong in ~/.claude/settings.json
0.20.15
- the TUI starts and ends tasks: Ctrl-] c asks for a brief in the status line (⏎ creates a task in the selected task’s project, where its new-task setting says, and opens it; Esc cancels; a full review queue asks “create another anyway?”), Ctrl-] x ends the selected task after “end task …? y / n” — a worktree task is then asked “remove its worktree?” and, with uncommitted changes, “discard them?” — and the selection moves to the next task
- commit and push from the GIT section: under uncommitted changes a commit message… field and a commit button commit what the checkboxes staged, in the task’s checkout (no amend, no automatic add; “nothing staged” and an empty message are refused, a hook’s output shows under the field). A separate push section shows branch → upstream and the unpushed count; push… first asks “push <branch> → origin/<branch>?” — or, without an upstream, “push --set-upstream origin <branch>?” — then push now sends it, never with force, and git’s answer (pushed, rejected, not authenticated) stays in the panel as text
0.20.14
- moving around the TUI without a prefix per step: Ctrl-] w opens a go-to picker over the pane — type to filter by project or title, ↑↓ move, ←→ jump by project, ⏎ opens, Esc closes — and Ctrl-] ←/→ jump to the previous / next project, Ctrl-] 1–9 to the n-th project, each landing on that project’s most urgent task (a permission first, then a question)
- a model per automation rule: the drawer on the AUTOMATIONS screen has a Model choice (default = your Claude Code model, Fable 5.1, Opus 5, Sonnet 5, Haiku 4.5, or custom… with any model id) for the tasks the rule starts — a cheaper one for routine work; it changes in place like “finished turns land in the Inbox”, the task keeps it across a restart, and an agent can set the same with `model` on the rule
- GitHub as the third issue tracker for automations, next to Jira and GitLab: ⚙ → Automations → Issue trackers → GitHub personal access token (fine-grained with Issues and Pull requests read, or classic with repo; kept in the keychain) and an optional GitHub API URL (empty = github.com, GitHub Enterprise Server = https://HOST/api/v3). A rule’s query is a string of GitHub search qualifiers, and pull requests are work items too — “is:issue assignee:@me is:open”, “is:pr review-requested:@me is:open”, “is:pr author:@me is:open status:failure” (commit statuses; Actions check runs are not in status:). Keys look like owner/repo#12 and the Steward reads GitHub tickets like the others. A rate limit or a bad qualifier shows up as a readable error in GitHub state
- merging a worktree that is behind main no longer strands you in a conflict: squash and merge commit first bring the branch up to date in its worktree (the dialog says so under the strategies), so a conflict stops there — the TASKS row shows conflict · n with continue, abort rebase, open a shell and let an agent resolve it — and never half-applied in the main checkout. A merge that still fails in main (a hook, a race) is undone when main was clean, with git’s output in the dialog, instead of the bare “Command failed”
0.20.13
- the TUI got colours: the header and help bar in the rail’s blue, each project with a bar in its own colour (⚙ → project → colour), glyphs amber for “needs you”, blue for working, green for done, grey for idle, the selected task on a dark band with a bold title, a blank line between projects, and the status line in segments (project in its colour, title bold, the state in the glyph’s colour; “allowed” green, “denied” red). Everything is in the 256-colour palette, so it looks the same in Terminal.app, iTerm2, Ghostty and over ssh
- robion-cli attach and tui leave the terminal as they found it: a Claude Code session switches mouse reporting on, and after detaching the shell you ran attach in got `[<35;12;5M` typed into it whenever the mouse moved — on detach (Ctrl-], quit, the session ending) mouse reporting, focus events, bracketed paste, application keys and the alternate screen are now switched off and the cursor shown, as tmux does. A long `robion-cli call` result is no longer cut short when piped
0.20.12
- Rhythm: Robion knows when nothing needs you — every agent runs and none waits for a permission, an answer or a look — and uses that time for you instead of a spinner. ⚙ → Automations → Rhythm switches on a quiet strip above the workspace, “Nothing needs you right now — 2 tasks running. Stand up, take a walk.” after a few minutes of waiting (Show after; close it for the stretch or with “not today”), because the phone rings when a turn ends or an agent asks. Two new automation triggers do the rest: desk.waiting (every agent has run N minutes and nothing needs you, once per stretch, only while you are at the Mac) and desk.sitting (N minutes at the desk without a break, again at every multiple; “A break is” = minutes without keyboard or mouse anywhere on the Mac). Two starter rules on the Automations screen (“starter rules…”, no tracker needed): “Waiting on agents → go for a walk” and “An hour at the desk → stretch”, both a push to the phone; an agent writes its own with set_automation. Everything is off until you switch it on; quiet hours and throttles apply as to any rule
- a terminal at any task from anywhere: `robion-cli attach` (in ~/Library/Application Support/Robion/bin, on a Linux server `robion-server cli attach`) lists the open tasks of every project with their state, `attach <task>` (id, title or project/title) puts that terminal at the task’s session — the same screen as the tab, typing reaches Claude Code, Ctrl-] detaches and the session keeps running. Over ssh to the Mac a dialog the phone cannot answer is one command away. While attached Robion treats the terminal as you looking (a held permission prompt appears there, the turn counts as seen, no push for it), and when it detaches the tab gets its own size back. The older robion-attach stays as the debug hatch into the pane host
- Robion in a plain terminal: `robion-cli tui` (same place as attach) shows every project with its open tasks and a state glyph on the left, the selected task’s live session on the right and what it waits for at the bottom — for a Linux server or a Mac over ssh, no Electron needed. Keys behind Ctrl-]: j/k or ↓/↑ pick a task (the pane switches), y allows and n denies its pending permission, ? shows the keys, q quits with every session running. It opens on the task that needs you most; like attach it counts as you looking at that task
- an agent can start a task beside itself and wait for it: the MCP tools start_task (the whole brief, its own worktree by default) and wait_task (its last reply and changed files; returns early when the task needs you). For a long rewrite, a second opinion on its diff or two or three variants to compare. The new task is an ordinary task — its own tab, timeline and worktree (TASKS tags it “agent”), both timelines note who started what — one level deep, at most agentTaskLimit open per task (config.json, default 3, 0 = off) and within the review queue limit; its permissions and questions still come to you
- the phone’s header is sharp again on iOS 26: the installed app used to draw under the status bar, and the system now fills that band with a Liquid Glass blur that washed out the task name and the back button — the status bar is opaque in the app’s colour instead (it follows the theme). iOS reads that setting when the app is added to the home screen, so remove the Robion icon and add it again from Safari (Share → Add to Home Screen); an existing install keeps the blur
0.20.11
- the sash next to a column of tool panels (CONTROLS, LOG, …) drags again after a panel was opened, closed or moved: dockview cached the column’s width limits from before the pin was released, so the column stayed locked at its width until the layout was loaded again — the size is now re-asserted right after the constraints change and the grid recomputes the limits with them in place
0.20.10
- the file editor wraps long lines, pairs brackets and indents as you type: a long line breaks at the panel edge instead of scrolling sideways, the bracket matching the one under the caret lights up, a typed ( [ { or " gets its closer (Backspace removes the pair, Enter between them opens an indented line), a new line keeps the indent and a closing bracket steps back out. Three switches in ⚙ → Appearance — “Wrap long lines”, “Brackets”, “Auto-indent” — all on by default, per computer, and open editors follow at once
- ⌘F with the caret in a file editor finds in that file: CodeMirror’s own find/replace bar opens above the text (⌘G next, ⇧⌘G previous, ⌘⌥G go to line, Esc closes) — before, the key always went to the menu’s Find File… and there was no way to search inside an open file. With the focus anywhere else ⌘F still finds files
0.20.9
- the tmux terminal backend is gone: terminals run in Robion’s own pane host, the default since 0.10 and the only backend since 0.20.4. The FIRST RUN screen asks for Claude Code alone (no tmux card, no “install via Homebrew”), the status line no longer knows a “tmux missing” warning, ⚙ → Tools lists claude and tailscale, and a config.json that still says "paneBackend": "tmux" is read as the pane host. Nothing changes for running sessions; tmux itself can be uninstalled
- an agent adding an automation no longer switches off the rules you already have: a rule it re-sends unchanged keeps its switch, only a rule whose trigger, conditions or actions changed comes back to the Inbox switched off
- the segment next to “new task” reads “main checkout” / “own worktree” instead of “main” / “branch”: it picks where the task runs, not a git branch — a main-checkout task runs on whatever branch is checked out there, an own-worktree task gets a fresh worktree (claude --worktree) with the main checkout out of the agent’s reach. The two project settings, the phone’s new-task switch and the starter automations say “own worktree” too
- INBOX in two halves: what waits for your word (proposed rules, proposals) stays open at the top, everything else — blocked, failed, started, finished — folds under “for information · N” and unfolds with a click (remembered per device); with items from several projects a chip row filters to one project. The phone folds and filters the same way
- a rule can keep its finished tasks out of the Inbox: the checkbox “finished turns land in the Inbox” in the rule’s drawer on AUTOMATIONS (an agent writes inboxOnDone: false) — for routine rules whose tasks you read in the task panel anyway
- the task state follows a fork of its conversation too: when you drive a task from another Claude client (the Claude app, Remote Control), which forks the session, the rail breathes blue, the phone gets its pushes and the hover card shows what the fork does, while the terminal keeps its own session — before, every hook of such a fork was dropped as “another session” and the task looked idle. A restart resumes the newest of the task’s conversations that no Claude Code process still runs
0.20.8
- the menu bar, tidied: a Task menu holds what happens in a task tab (New Task, New Terminal, Restart Session… for the active task, the terminal splits and Focus Terminal ▸, Close Panel, Park Project Agents…), File keeps the projects and gains Show Project in Finder, the search chords moved to Edit → Find (Find File ⌘F, Search in Files ⇧⌘F, Search Terminals ⌥⌘F), Window gained Board and Automations next to Overview and Inbox, View gained Appearance ▸ with the themes and Reload Window in place of Force Reload; Help has robion.app, Report a Problem… (the public issue tracker; the old “Robion on GitHub” pointed at a private repository), Open Logs Folder and the developer tools
- Window → Tree ⇧⌘E and Window → Git ⇧⌘G are gone (with their ⌘K actions): both sections sit in the side panel for good, ⌘B shows and hides it
- fix: a task kept blinking “working” for hours after the agent had finished when it left a shell running in the background (a dev server, a watch loop that never ends): the turn now counts as done — the status line reads “⏳ shell still running: <command>” — and only running subagents keep a task working. A background task that later finishes still wakes the agent up as before
0.20.7
- Robion runs its server, the agent tools (the MCP shim in every session) and the pane host on the Node inside the app: a node installed with Homebrew is neither needed nor used any more. A Homebrew upgrade that replaced or broke the system node used to cut every new session off from its Robion tools (the Steward reported “the Robion MCP server failed to connect”) and, after the next restart, to leave the window at SERVER FAILED — neither can happen now; a headless Linux server still runs on the system node
- SERVER FAILED with “server keeps crashing” quotes the line that explains it and points at logs/desktop.log, where the app now records every server start and exit — before, a server that never got as far as its own log left nothing behind
- the Steward’s sessions load only Robion’s MCP server, not your own MCP servers or claude.ai connectors: its allow list refused their tools anyway, they cost start-up time and tempted it into calls that were denied
- Electron 44.4.2 (Chrome 152, Node 24.21) — the Node Robion now runs on comes with the app and is updated with it
0.20.6
- the side panel (TASKS, TREE, GIT) shows its hairline towards the grid again: the sections’ own backgrounds had been painting over it, so the panel ran into the terminal next to it with no visible edge
- scrollbars show their thumb only while the pointer is over the panel that scrolls — the tree, git, a file, a terminal; the gutter stays where it was, so nothing moves, and the thumb is back the moment the pointer returns
0.20.5
- a tool panel (CONTROLS, LOG, MCP, JIRA, STATISTICS, activity, DRC) keeps its width when a group is added as well: dragging a tab out into a new group, or opening a file into a new group, no longer spreads the columns evenly — 0.20.4 held the width only when a neighbour closed; the new group takes its space from the terminals and files, and a tab dropped at the top or bottom edge still splits the height in half
0.20.4
- ⚙ → Agents no longer offers a Terminal backend switch: terminals run in the pane host, Robion’s own tmux replacement, since 0.10 by default and now for everyone; a config.json that still says tmux keeps it until it says node
- the markdown **preview** remembers where you were too: a project switch, a relaunch, a tab switch or a trip to **source** and back land at the same place (0.20 remembered the editor only, the preview started at the top)
- **restart session…** takes a few seconds instead of half a minute: it no longer writes a handoff note first (a headless claude summarising the whole conversation), the session resumes with --resume right away, and only a resume that fails writes the note from the transcript and starts fresh from it; parking a project’s agents still writes the notes as the setting says
- fixed: the “session ended” overlay (and the task header on the phone) said “session ended” twice — the pane’s detail repeated the label, in English even in the Czech UI; a dead pane now carries a detail only when it says more (parked, restored from handoff, no pane backend)
- INBOX: one “finished” item per task — a later turn refreshes it (“updated 5 min ago”) and once you answered nothing more comes for that task (one task used to leave four notes in an hour); dismissing asks why with one tap (**already done**, **not now**, **not needed**, **wrong premise**, or your own words — the Steward learns from it, on the phone too); **snooze** hides a proposal, a proposed rule or a blocked run until the next working day 08:00; **edit the brief** before accepting; **dismiss all** on a group; every item shows its age; blocked and failed runs and the Steward’s hand-overs reach the phone as a push; ⌘I (Window → Inbox) and ⌘K “inbox” / “automations” / “board”; the dock badge counts what needs you
- the Steward shows what a plan costs and takes (“last plan: 7 min · 46 turns · $1.23”, also in the plan file and the automations history), can be **cancelled** while it runs, keeps its plan under the Inbox header folded to six lines with **past plans** on request, and no longer prints its heading twice; tasks it finds waiting for you become Inbox items “needs you: <task>” that open the task; its feedback reaches back to the previous plan (Monday sees Friday and the weekend) and covers the tasks it started and its hand-overs too; the briefing leaves out unchanged card bodies below the top eight; **Steward memory (memory.md)** is editable in Settings, **Model** is a picker with the default and a custom id, a failed plan is pushed to the phone; fixed: opening a “started by the Steward” item did nothing, and a rule’s `steward` action read “ran” even when the plan failed or the Steward was off
- AUTOMATIONS: the **Steward** row above the rules (schedule, state, last plan, switch, run now); switching a rule off asks **why off?** and shows the reason under its name; the drawer has **edit via agent**, **delete**, the rule’s own history with cost, **→ task** and **in the Inbox** links, and **skipped events** — the tickets an issue rule saw and the condition that turned them away; **starter rules…** for a connected tracker (a new ticket for you → a proposal, an urgent one → a task at once); **Keep history for** deletes runs, answered items and the Steward’s daily files after 90 days; the phone runs a rule with **run now**, shows its last run and asks why when you switch one off
- ⚙ → Project gains **Delete project** → **delete with files** next to **remove from Robion**: the project leaves the rail and its folder, with everything in it, moves to the Trash (the Finder can put it back); the confirm names the folder; local server only — a remote box has no trash, so there the button is greyed out; both actions also sit at the bottom of the project’s right-click menu in the rail (**remove from Robion…**, **delete project with files…**)
- fixed: **remove from Robion** with an open task did nothing visible — the server refused, the dialog closed anyway and the project stayed; both buttons are now greyed out while a task is open, with the reason ("close the project's open tasks first (N open)"), and a refusal the server still makes shows in red at the bottom of the dialog
- fixed: a task whose agent moved into a worktree mid-session (“do it in a new worktree” → EnterWorktree) stayed listed under main until the agent’s first `cd` — Claude Code fires no CwdChanged hook for EnterWorktree; the task now follows the cwd every hook reports, so it moves under the worktree with the next tool call, and a resumed worktree session can no longer end up filed under main
- a tool panel keeps its width when a neighbour closes: closing a terminal or a file next to a CONTROLS, LOG, MCP, JIRA, STATISTICS, activity or DRC tab no longer shares the freed space out evenly over every column (the controls panel jumped to half the window) — the tool panel stays as wide as you left it and the closed panel’s space goes to the terminals and files next to it; in a stack the same holds for the height
0.20.3
- an update no longer parks every running agent: a pane host of an older but compatible version keeps running the sessions as it is; the status line shows “pane host awaiting replacement” with **replace now…**, and the host replaces itself once the last session ends — the park-and-restore of all tasks at start-up only runs for a host too old to adopt
- when a replacement does run, a banner says so with the progress (“replacing the pane host: parking sessions 3/30”, “starting the new host”, “restoring sessions 12/30”) instead of thirty grey terminals; a pane reads “the session is moving to the new pane host…”, **restart session…** and new tasks wait with a plain reason, and the banner asks not to restart Robion meanwhile
- a replacement takes seconds, not minutes: it writes no handoff notes (the sessions resume here at once), and a resume that does fail writes its note from the transcript then; the headless claude writing a handoff no longer waits 3 s for stdin, and at most three run at once when many tasks park
- fixed: the retire of the old host was reported as “migration failed: connection lost” though it worked, and the start-up restore and the host watchdog restored panes twice — one task’s session was started fresh without need; a restart of a pane is now a single launch however many callers ask
0.20.2
- pane host: a working agent no longer stalls its terminal — the crash journal is rewritten once the output goes quiet (at the latest every 10 s) instead of every second, and opening a terminal replays the 5 000 lines the panel keeps instead of the whole 50 000-line history; on slower machines the pane host felt sluggish next to tmux; the first start after this update parks and restores every running agent once so the running pane host is replaced
- restart session… in a Claude Code tab’s menu: the agent finishes its turn, writes a handoff and Claude Code starts again in the same tab with --resume — one task’s park and restart in one step, e.g. after a Claude Code upgrade; the tab reads “· restarting…” meanwhile and the item is greyed while the agent waits for your answer
0.20.1
- /robion:help — the user manual as a plugin skill: a session inside Robion answers how the app is operated (panels, checkouts, the phone, the deck, settings, troubleshooting, what is new), in your language
- merging a checkout runs the project’s git hooks with the PATH your terminal has: what the login shell knows (nvm, pnpm, cargo …), the node Robion’s server runs on and Homebrew — a husky pre-commit that calls npm no longer fails with “npm: command not found”; worktree setup scripts, run buttons and probes get the same PATH
- a squash whose commit a hook refuses puts a clean main back as it was instead of leaving the squashed changes staged there; a main with changes of its own keeps them, and the error says so
- the side panel keeps up with worktrees: the merge dialog follows the live checkout (a commit while it is open ticks “the worktree is clean”), the task rows no longer keep a stale count after an edit or a commit, a worktree pinned in GIT with no task refreshes with the project instead of waiting for the 15 s poll, and on a Linux server the worktree watch survives the removal of the last worktree
- the checkout list travels with the checkout.updated event, one per burst of changes, so the desktop and the phone no longer pull it after every git tick (an older client keeps pulling); edits inside a worktree refresh that checkout’s GIT and tree, not main’s
- merge dialog: a refused squash shows what the hook printed in a block under the message, without the protocol code in front; “remove the worktree after merging” ticks the removal onto the merge (greyed while a task runs there, or for a pull request)
- ⚙ → Agents → check again also re-reads the login shell PATH, so a tool installed after Robion started is found
0.20.0
- worktrees are first-class checkouts: the side panel’s TASKS section groups the project’s tasks by checkout, the GIT caption switches (and pins) the tree and git to one of them, ⌘K lists them; the segment next to “new task” picks main or an own branch — an own branch starts Claude Code in its own worktree (claude --worktree, based on the local HEAD), main stays out of the agent’s reach; ⚙ → project sets the default separately for tasks by hand and for the Steward’s and automations’ tasks (own branch by default)
- a checkout can be updated (rebase onto the default branch; conflicts are handed to an agent task), merged back (fast-forward, squash, merge commit or a pull request, with clean/idle/overlap checks first) and removed; ending a task offers to remove its worktree and branch, or to discard unmerged work; “tidy” collects task-less worktrees that are merged or older than 14 days; the phone shows the branch of a task, offers an own branch for a new one and merges from the Changes tab
- Claude Code’s CwdChanged hook is installed alongside the others, so a session that moves into a worktree keeps its task; existing installs read “outdated” once — click “update hooks”
- a project gets an icon instead of an emoji: ⚙ → project or right-click → “icon…” opens a grid of 72 monochrome icons; the icon takes the project’s colour and sits where the dot was, in the rail, ⌘K, the overview tiles, the hover card and on the phone; an emoji set before stays as text until you pick an icon; four more colours: rose, plum, indigo and mint
- a file panel remembers where you were: the scroll position survives a project switch and a relaunch; the “source” view of a markdown file is a real editor with autosave (it was read-only)
- project settings no longer drop a controls panel an agent defined while the dialog was open
0.19.0
- the side panel (tree + git) can sit left or right of the workspace and can slide out on hover: ⚙ → appearance; a file opened from the tree lands in a group right next to the panel, and a file group left behind on the other side is not joined
- the Steward has its own schedule above the projects: ⚙ → automations → Steward → schedule (five cron fields, weekdays 6:30 by default) — the switch alone never scheduled anything before; the Inbox shows the next plan
- the Steward can read a ticket: steward_ticket brings the description, newest comments, links and fields from Jira or GitLab (group/project#12); the briefing says what each task waits for (the agent’s question, a permission, the last prompt, the last timeline line); every plan lands in the automations history
- proposals nobody answers expire: ⚙ → automations → “Inbox proposals expire after” (7 days by default, 0 = never); the Steward reads an expired one as unanswered, not as a veto, and counts stale ones once instead of naming them every day
- a crash no longer leaves a black window: the workspace and the app have a fallback with “try again”, “start from the default layout”, “reload the window” and “copy the error”; renderer errors go to logs/desktop.log in the App Support folder (add it as a LOG source)
- a session that outlived an update is told: its Robion tools append “Robion was updated, restart this session” to every result and the task timeline gets a note
- releases build from a clean checkout of HEAD (uncommitted work stays out) and pnpm e2e:smoke drives a throwaway instance through ten scenarios before one; ROBION_DEBUG_PORT for a second dev instance
0.18.0
- the Steward learns from what you do with its proposals: dismissing one in the Inbox asks “why?” (optional) and the next briefing lists yesterday’s proposals with their outcome — accepted with the task’s state, dismissed with your reason; a dismissed item is not proposed again
- standing instructions for the Steward: ⚙ → automations → Steward has a text box (the file STEWARD.md in the Steward’s folder, editable by hand too) read before every plan, above the board, the tickets and the Steward’s own memory — “no proposals at weekends”, “robion comes first”
- the briefing says how long a task has sat idle or waiting and what the agent last said, so a task that asks you something is not mistaken for a proposal; a project can be taken out of the Steward’s scope in ⚙ → project (its cards are skipped too), and projects with no open task, no commit today and no card fold into one line
- agents no longer fill the workspace with diffs: request_review puts the note on the task timeline and flags the GIT section of the side panel (it opens and lights up for a moment); diffs open as panels only for up to three files or when the agent asks for it; the guidance agents get says so — edited code is in the GIT panel already, open_file is for things they produced
- protocol 26: a remote server on an older release shows as “update the server” until it runs 0.18.0; running Claude Code sessions keep the old tool descriptions until they restart
0.17.0
- the tree and git left the workspace grid for a side panel right of it: the tree above git, always in the same place, each section folds to its caption; ⌘B (View → Toggle Side Panel, the palette, the button in the TREE caption) folds the whole panel to an icon strip and the icons bring it back; shown or folded is remembered per project (a workshop project starts folded), width and split per device; layouts saved with the old tree/git tabs open without them
- the side panel follows the active task: click another task’s tab and GIT shows that task’s “since last agent turn”; a task in a worktree swaps the tree to its checkout — the ground for a worktree switcher in a later release
- the grid holds only terminals, files and the home surface, so opening a file no longer nudges the tree’s width; ⇧⌘E / ⇧⌘G, ⌘F / ⇧⌘F show the panel with the section they name
- board: a click opens the card whole (title, note, where it comes from) with edit, delete and “start a task” — Claude Code in the card’s project with the card as its first prompt; the card follows the task to doing
- protocol 25: a remote server on an older release shows as “update the server” until it runs 0.17.0
0.16.0
- automations: rules that react to the outside world with no model in the path — a ticket assigned to you in Jira or GitLab, or the clock (cron) — start a task, push to the phone, type a follow-up into the agent’s pane, press a cockpit button, or leave a proposal in the new Inbox; an agent writes the rule for you in plain words (“when a ticket labelled robion is assigned to me, start a task”: automations_help / set_automation / test_automation, /robion:automate) and it starts switched off until you enable it
- Inbox and Automations live in the rail above the projects: rules an agent proposed, proposals waiting for your go, runs blocked by your limits (daily task cap, quiet hours, throttle), finished tasks with the agent’s last message; the Automations screen lists every rule with a switch, “run now” (on the newest matching ticket) and its history; ⚙ → automations holds the limits and one connection per tracker — Jira moved here from the JIRA panel, GitLab is new
- the Steward: a planning session that reads your projects, open tasks, tickets, the inbox and your board, and proposes the day’s tasks into the Inbox with a brief for each (“plan now” in the Inbox, or a rule with the steward action every weekday morning); autonomy 2 lets it start the proposals it marked safe itself — never a release, a push, a destructive command, money, people or secrets; optional supervision reviews a finished automation task and sends the agent one follow-up or hands it to you with a note; all off by default
- the board (NÁSTĚNKA): your cards in todo / doing / done above the projects, drag to change state, the order is the priority the Steward plans from; a card carries its project’s colour and the task that came out of it; agents get board_list / board_add for “remember to…”; also on the phone (#/board, #/inbox)
- protocol 24: a remote server on an older release shows as “update the server” until it runs 0.16.0
0.15.1
- hotfix: Robion no longer types /effort into a workshop agent between steps — Claude Code saves a typed /effort as your default effort for that model, so 0.15.0 silently changed it (check the effort in Claude Code or modelSettings in ~/.claude/settings.json if you ran a workshop project on 0.15.0); the per-session effort and output style still come from the launch settings, which never touch your defaults
- fix: the agent really gets Robion’s session-start context now (task, panels, design record) — Claude Code runs SessionStart only as a command or MCP-tool hook and skipped our HTTP handler without a word, so this context never arrived; the hook is a short curl command now (the hooks banner offers the update), and a session whose start still slips through gets the same context with its first prompt
0.15.0
- the design panel is the wizard now: every stop of the agent is a gate the record carries — the question round as a form with the recommended answers in place and “decide for me” per question, the concept variants as cards, a produced step as an approval screen with the renders, tables and files to look at and one Continue button; your reply is written into design.json through the project’s own design_record.py and the agent is told in one line — the map moves when the record moves, never before (needs Maker Pack 0.26; older packs keep the brief panel)
- changes to a step under approval: write them into the composer — the step goes back to the agent with your note; the agent’s own questions (AskUserQuestion) are answered in the panel too, no terminal
- workshop projects launch Claude Code with their own settings for that session (⚙ → agents: a lower effort, the plain output style, optionally another model — your own model and its 1M context stay by default); Robion never compacts a session on its own
- what a step costs: the estimate in the header and in the step’s files line comes with the step’s own share of the month (“step ~12 Kč”)
- phone: the same gates in the design tab — form, cards, approval — and the reply line as a small chip in the chat
- photos in the design panel: the brief and every note to the agent take photos — pick them, drop them from the Finder or paste them (⌘V); they land in the project’s .robion/uploads, the agent looks at them before the brief and the record column shows them under the idea (a remote server needs this release too)
- a workshop project never asks “tasks are waiting for review” on Start any more (the review queue counts one project and skips workshop projects), and a child Claude Code the agent spawns (a plugin update, a test session) can no longer close the live task — hooks from another session are ignored
- the live chip in the design panel shows the context window beside the model (claude-fable-5-1 · 1.0M)
- protocol 23: a remote server on an older release shows as “update the server” until it runs 0.15.0
- a task no longer vanishes when its agent runs another claude (claude plugin update, a test session): that child reported under the task’s name and its exit closed the task and killed the live session; hooks now count only for the task’s own session
0.14.0
- workshop projects: the new-project dialog asks whether you want to make a thing or develop software; a workshop project is its design panel from the first word — write the idea there, the agent starts in the background without a terminal tab, tree and git only on request, the tab has no close button and a layout reset keeps it (the type switches in the project settings)
- the design panel follows the agent: every step shows what fits its state — the questions of that step while the agent waits for you, what the agent is doing while it works (phase, clock, estimate, model and context, its step list, last reply, tool calls, allow/deny for a permission), the files once it is done; the current step comes up by itself, a click pins another one
- every send is visible at once — “sent to the agent…”, then “the agent is working · 3 min” until the transcript has the prompt; concept cards are large, with a “recommended” badge and an enlarge button
- what a design costs: enter your Claude subscription in ⚙ → application and the panel header shows the design’s share of the month’s tokens (“so far ~120 Kč”); without it, Claude Code’s API estimate
- Maker Pack 0.24: the design record is written only by the project’s design_record.py (real timestamps, validation, a commit at every gate), a 3D-printed part ends at the print plan for your own slicer — Robion never slices; the pages of the brief panel need pack 0.24; a remote server on an older release shows as “update the server” until it runs 0.14.0
- and from the first day of testing: a “stop” button next to the agent’s phase (Esc into the pane), the questions and cards never hide behind a working agent, an answered gate moves the panel on to the next step at once, your own note shows in the exchange until the agent answers, the record column is resizable, tree and git open from the Window menu beside the anchor, and a Robion started from an agent’s shell no longer hands the Claude Code child-session mark to its panes (the pane host migrates itself on the first start)
0.13.0
- design panel (NÁVRH): a Maker Pack project now keeps its design in design.json — the idea, the answers and who decided them, the concept, the ten stages with their status and a change log; the panel opens by itself when the agent writes the record and shows the map of stages, what is out of date, the brief panel with the questions, the record beside it and a composer to the agent
- phone: a task with a design record shows the stages as a strip under its header and a “design” tab with the record; a tap on an answer changes it
- change requests: “change” on a recorded answer sends the agent a prompt with the old and the new value — the agent updates the record, marks what goes out of date and says what will regenerate; Robion never writes the record itself
- controls: three widgets for agents — choices (cards with an image, a description and fact chips, single or multi pick), gallery (several images with captions) and table (columns and rows)
- a remote server on an older release shows as “update the server” until it runs 0.13.0 (robion-server update on the box); the design record needs Maker Pack 0.23 or newer
0.12.12
- servers: a remote server parked as “update the server” comes back by itself once the box is updated — the desktop checks its /health every 30 seconds and reconnects when the protocol matches; until now the row stayed red until Robion was restarted
0.12.11
- servers: the “update to …” button under ⚙ → Servers now shows what happens after the click — the row says “updating to …” while the box builds and “restarting…” while it comes back, and the button stays gone until then; a second click no longer starts a second update (the server refuses one while the first runs), and an update that never comes back gives the button back after 20 minutes with a pointer at the box’s update.log
- phone: a project created from the phone no longer hangs on Claude Code’s “do you trust this folder?” question — Robion answers it for the folder it just created (in ~/.claude.json, before every launch); cloned or picked folders keep the question
- phone: the terminal tab has a key bar (Esc, Tab, ⇧Tab, arrows, ⏎, ^C, 1–3) for the dialogs Claude Code draws itself — folder trust, a login, an update prompt; a freshly launched Claude Code that stays silent for 10 seconds gets a hint in the chat pointing at the terminal
- protocol 19: a remote server on an older release shows as “update the server” until it runs 0.12.11 — robion-server update on the box
0.12.10
- desktop: a diff tab that is not in front no longer re-fetches its diff on every change in the repo — a review with many diffs open during a build was asking the server for thousands of diffs an hour; the tab loads the current diff when you switch to it
- telemetry: looking at a diff or at a commit is no longer an event (git.diff and git.commit were reads the panels repeat on their own) — opening the panel still counts
0.12.9
- phone: a tap on a picture in the chat opens it over the whole screen — pinch zooms, one finger pans, a double tap zooms in and back out; the pictures of an open_files call show in the chat too
- update: a new Robion downloads on its own and the status line shows it — the progress, then a “ready · restart” chip; restarting installs it while agents and terminals keep running and reconnect, and “Restart and Install” sits in the app menu and under ⚙ → Servers
- update: the check repeats every 6 hours and after wake from sleep, so a cockpit left open for days still gets the release; a failed check says why in one sentence (offline, release not published yet) with the raw error in the small print
- telemetry: PostHog keeps only the country of an event (resolved from the sending IP, which is then discarded) — TELEMETRY.md describes the setup
0.12.8
- phone: an image the agent made shows in the chat — a markdown image in its reply (path relative to the working directory) or an open_file on a picture; PNG, JPG, SVG and the other browser image types, a Gerber file renders as SVG
- phone: a long message no longer vanishes — the text reaches Claude Code as one paste and Enter follows a beat later; before, the terminal split it into several pastes and swallowed the Enter, so the prompt sat unsent while the phone reported success
- phone: a sent message shows right away as “sent · waiting for the agent” until the conversation has it — a busy agent takes it up at the end of its turn
- phone: the message box has iOS autocorrect and capitalization back — with them off, a period typed after a word landed as “word .”
- phone: the red “connection closed” banner no longer outlives a reconnect — a request cut off by a dropped connection is not an error worth keeping, and any older error clears once the connection is back
0.12.7
- phone: the agent’s question (AskUserQuestion) is a sheet of cards — one tap answers a single choice; several questions or a multi-select are marked first and sent with one button that stays in view under the list; “own answer” is a card that turns into a text field
- phone: while a question is open the message box hides instead of sitting disabled under it, and the technical “sent as keystrokes” note is gone from the question
- task tab: closing a split terminal no longer leaves “NOT_FOUND: Task … has no pane 2” in the status bar — the server reported the killed shell dead before the close had finished, and the tab closed it a second time
- phone: the offline, update and error banners share one strip at the top that takes the notch inset once — a screen header under a banner had padded it a second time
0.12.6
- controls: a status probe that runs a shell command finds the same tools a terminal does (Homebrew, ~/.local/bin, volta) — the deploy panel’s “version” probe had shown “down” because node was not on the app’s PATH
- a command probe that fails and has no “off” text shows the command’s first output line in red (e.g. “node: command not found”) instead of a bare “down”
0.12.5
- terminals inside one task tab: every terminal offers “new terminal to the right / below” (⌘D / ⇧⌘D), splits nest as deep as you like, dividers drag, ⌥⌘arrows move the focus between them, ⌘W closes the focused added terminal; added shells share the task’s folder and environment and close with the task
- settings: a search box over every section (⌘F) — type a word and only the matching rows stay, diacritics and case do not matter
- the recently-closed list on the project home says “start again” for a task whose session left no transcript, instead of promising a resume that cannot happen
- fix: closing the last terminal of a project could freeze the window for good
- fix: “No” or Esc on a permission or question dialog left the task marked as waiting; it goes idle at once now
0.12.4
- fix: on the iPhone the header could end up under the status bar after the keyboard had been used — the page itself no longer scrolls, the keyboard shrinks the app instead so the prompt field stays above it
- the one-time “usage statistics are on” banner is gone; the switch and the full list of what is sent stay in ⚙ → Privacy
0.12.3
- anonymous usage statistics: Robion now reports which features are used and which versions run (PostHog, EU servers) — no content, no paths, no identity beyond a random install id; ⚙ → Privacy lists every field and has the switch
- Window → Browser (⇧⌘B) opens the web preview of the task — until now it was only in ⌘K
- the Dock badge counts every agent that needs you: a permission, a question, an error, or a finished turn nobody has looked at yet (it clears once the pane is viewed)
- fix: the phone showed an agent’s question (AskUserQuestion) as a permission card with raw JSON instead of the answer buttons — Claude Code 2.1.258 asks permission for the question dialog itself, which is now treated as the question; the answer keys were re-verified against the current dialog (tabs, multi-select, “type something”, review step)
- fix: a fresh pane showed “agent is waiting for an answer in the terminal — <name> needs your input” for a session that never ran in it — Claude Code announces blocked background jobs (claude agents, ~/.claude/jobs) to every new session, and Robion took the notice for the pane’s own question; it is ignored now — remove a stale job with claude rm <id>
0.12.2
- a working agent is visible at a glance: its state cell in the rail and the dot in the terminal tab breathe slowly while it works; a waiting task stays still so it remains the thing your eye lands on
- LOG panel: the time column shows local HH:MM:SS.mmm instead of a UTC clock without milliseconds; query_logs keeps UTC but gains the milliseconds
- fix: a LOG line whose level came wrapped in terminal colour codes (a red ERROR) got no level and showed the raw escapes — the codes are stripped before the level is read
- fix: renaming a LOG source restarted its tail and doubled the buffer — only a changed path or command restarts it now
0.12.1
- fix: a session you continued from another client (Remote Control, the Claude app) dropped out of Robion — no state, no push, nothing in the timeline; the pane now recognizes such a session by its transcript and adopts it
- fix: Esc right after sending a prompt — before the first word of the reply — left the task “working” for good; the pane now reads Claude Code’s own session status and ends the turn within a few seconds
- remote servers: hooks were never installed on a headless box, so its agents never reported a state — ⚙ → Servers shows that now and installs them with one click
0.12.0
- the agent knows it sits in Robion: a built-in guide teaches Claude Code the cockpit (panels, controls, previews), /robion:guide and /robion:cockpit answer the details, it learns the cockpit’s state as the session starts, and “agent instructions” opens the project’s CLAUDE.md
- the agent’s task list mirrors live into the rail, the phone and the deck — progress is visible without opening the terminal
- LOG panel: point a project at log files or a streaming command and tail them in the app; agents read and search the same logs over MCP instead of asking you to paste them
- “send to agent” now also works from a LOG line and from a failed run button
- no more premature “done”: a task whose agent handed work to background subagents stays working until they actually finish — the phone push arrives at the real end
- phone: auto mode joins the permission-mode picker, and opening a brand-new task’s chat no longer flashes a red internal error
- the deck shows more than buttons: permission approvals on keys, a usage-limits plate and a task overview page
- Catppuccin Mocha & Macchiato themes; tabs get a right-click menu (maximize, close, close all tabs) and a clearer accent on the active tab; text selections in rendered views survive re-renders
- Linux server: “remote enable” finds a Tailscale installed after the server started, the new-projects folder is created on first use, and the web guide spells out the one-time operator command
0.11.0
- projects can now live on other machines: pair a Linux server with one link, its projects get their own group in the rail, and new ones can be scaffolded, imported or cloned straight onto it; files drag & drop across projects and servers
- remote servers update themselves: one click in ⚙ → Servers builds the new version next to the running one and switches atomically; access is per device — pair, list and revoke each client separately
- web & HTML previews: the ⌖ picker sends an element with your note to the agent (“make this button bigger”); agents can also ask for a pick, take a preview screenshot or query the DOM over MCP
- a dev server running on a remote server previews in the app through a one-click tunnel
- files open editable right away and autosave as you type; ⌘E flips between recent panels (and ⌘0–9 now work on the Czech keyboard)
- the rail: dropping a file on a project row copies it there (hovering springs the project open), and the second line counts the project’s open terminals and agents
- the Ulanzi D200 stream deck works as a physical controls panel
- macOS 26 gets the icon in the new format — no more white plate around the dark tile
0.10.0
- the pane host is now the default terminal backend — a fresh install never needs tmux; existing setups keep whatever backend they chose in ⚙
- new project straight from the desktop: the ⊕ button in the rail (or File → New Project…) creates the folder with git init under your “new projects” folder — and offers to pick that folder if it is not set yet
- notifications are Web Push only: end-to-end encrypted pushes straight to the installed phone app, no third-party service — the ntfy layer is gone; ⚙ → notifications sends a test push to the phones
- the phone now guides you to install it as an app (the one thing that unlocks push): a real install button on Android, the Share → Add to Home Screen steps on iOS
- a local server that cannot start shows a full screen with the reason and a “try again” button instead of a status-line whisper; the hooks and limits banners appear even before the first project
- controls: set_controls can rename a panel or swap its icon without touching the widgets, and image tiles now watch folders that do not exist yet — the first render shows up by itself
0.9.2
- controls: a project (or a task) can hold several named panels instead of one list — release buttons in one, a model’s parameters in another; each keeps its own values, layout and viewport, and an agent redefining one no longer wipes the others
- controls: every panel opens as a tab of its own (“open as a tab”, or straight from the agent’s set_controls), so parameters can sit beside the 3D view while the launcher lives elsewhere; OVLÁDÁNÍ stays the overview of all of them
- controls: a run button can hide its terminal (silent) — the button itself pulses while the command runs and refuses a second press, the finished shell closes itself, and only a failure shows its output
- fix: run buttons hung on “running” for good — the terminal’s exit marker only ever existed under tmux, so on the pane host nothing ever finished a run (a silent button stayed disabled). The exit code now comes from the backend that owns the terminal
- fix: the output of a finished command is readable again (a failed build read as empty), and a terminal that can no longer be attached shows its last output instead of a bare restart screen
0.9.1
- update fix: the one-time pane-host migration could get stuck on a terminal it thought was parked — every new task then died instantly with “session ended”; the migration now clears every leftover terminal (scrollback saved) before retiring the old host
- restoring a shell terminal properly un-parks its task again — a task marked parked while its terminal lived on was exactly what wedged the migration
0.9.0
- phone: answer the agent’s questions (AskUserQuestion) with real buttons — options, multi-select and a free-text “other”, right in the chat
- phone: plan approval shows the whole plan with the terminal’s real choices — approve with auto-accept edits, approve with manual approvals, or keep planning with feedback
- phone: switch the session’s permission mode (manual / accept edits / plan) from a chip on the task screen
- phone: attach images — photo library, camera or clipboard paste; on Android, share a screenshot straight into Robion (share target); files land in the task and the agent reads them itself
- phone: “new project” creates a fresh folder (git init) under the folder configured in ⚙ → application
- phone: a notification tap now lands in the right task even when the app was closed (iOS dropped the deep link)
- phone: the terminal tab has its colours again — the pane host update that serves them is now rolled out automatically (one-time park & restore of running agents)
0.8.0
- phone: push notifications straight from the server (Web Push) — no ntfy app needed; enable them in the phone’s settings, and a permission request carries allow/deny buttons right on the notification
- phone: allow/deny straight from the overview row when an agent waits for permission
- phone: chat loads older history, edits show as a red/green diff, and the terminal tab keeps its colours
- phone: the composer grows for multi-line prompts and a half-typed draft survives; swipe from the left edge to go back
- phone: when an update ships, a banner offers the reload
- controls: a steps tile with a probe finally samples it — pipeline phases move as the run progresses
0.7.0
- controls: buttons report their live run state (running / ok / error / stopped) and the new steps tile shows pipeline stages — a release cockpit sees where a run is
- controls: tiles carry proper icons (Lucide) instead of emoji, on the desktop and the phone
- tree & git panels refresh by themselves on any file change in the project (working-tree watch)
- tree: create, rename and trash files and folders right in the panel; reveal in Finder, copy path
- release notes: this dialog — it opens once after every update, and any time from Help → What's New
0.6.0
- own pane host: Robion can keep terminals in its own background daemon — tmux is no longer required (opt-in in ⚙ settings)
- controls: run buttons take parameters, image tiles refresh live, finished runs can close themselves (autoClose)
- agents can read and search the project's terminals (MCP read_terminal & search_terminals)
- Maker Pack: the Claude Code plugin installs and updates right from the app
- terminal: bundled JetBrains Mono with Nerd symbols; optional smooth caret (⚙ appearance)
0.5.2
- maximize a panel over the workspace (⇧⌘↩ or double-click its tab)
- terminal: WebGL no longer blanks the layout when many panes are open
- the robion.app website is live
0.5.0
- new name: AgentDeck is now Robion — new icon included
- automatic updates: the app checks GitHub releases and installs on quit
- controls v2: conditions, groups & pages, checklist, presets, live probes — and the phone renders the same cockpit
- full File & Help menus with panel shortcuts