Changelog
What changed in each release
Features, fixes and refactors in every published dev-3.0 release, newest first. Dates are when the GitHub Release was published. Download links and platform notes are on each GitHub Release.
v1.57.1
GitHub ReleaseFeatures
- Claude Sonnet 5.5 (
claude-sonnet-5-5, native 1M context) gets its own launch presets — Auto and Bypass at Medium/X-High effort plus Default, Plan and Accept Edits — listed directly above Sonnet 5 in every mode group, so it can be picked before launch instead of switching with/modelinside Claude Code - The tmux tab bar now ends with a + button: one click opens a new terminal tab in the focused pane's directory, like Cmd+T
dev3 task move --status in-progressanddev3 task create --scratch --runaccept--agent <id> [--config <id>]to preselect the agent and preset in the launch approval dialog, the same waydev3 agent spawndoes; the user still has the final pick, an unattended auto-approval launches the suggestion instead of the global default, and unknown or mismatched ids fail instead of falling backdev3 localis a shorthand fordev3 remote --no-tunnel --host 127.0.0.1: the headless server listens on this machine only and opens no public tunnel
Fixes
- The "Show Diff" and "Open in..." tooltips on each row of the Changed files hover list now open above the list instead of underneath it, on mouse hover and on keyboard focus alike
- The macOS Window menu now gets the system's own window items — Fill, Center, Move & Resize, Full Screen Tile, moving the window to another display, and the open-window list — exactly as macOS offers them for your OS version and connected displays (reported by Ofer Belinsky)
- Clicking a system notification now only brings the dev3 window to the front and never opens a task, so an ordinary click inside the app after a notification can no longer jump you to some task
- Removed the redundant standalone Diff button from the task git bar
- Sleep prevention now re-checks on its own timer instead of riding the resource-monitor tick, so a tick stuck on a probe can no longer leave the Mac free to sleep until the app restarts
- Downloading an artifact now saves one self-contained HTML file whenever the page embeds all of its files — including every report built from the default template — instead of always handing over a ZIP
- Prevent sleep no longer lapses once an hour: the sleep inhibitor is renewed with an overlap before its safety timeout, so an idle Mac waiting on scheduled messages or timers no longer sleeps the moment the old inhibitor expires
v1.57.0
GitHub ReleaseFeatures
- The tmux window bar now sits at the top of every task terminal and only appears while the session has more than one window, so a lone window gets its row back and a window opened by Cmd+T or by an agent shows up where the eye starts instead of looking like the task was lost
- The dashboard now pins each project's coordinators at the top of its card, including ones that are busy working, hibernated or disconnected, so you can open one in a single click instead of hunting through the board
- Task terminals with more than one tmux window (tab) now show a Close window button next to New window, so a tab opened with ⌘T can be closed without knowing a shortcut; the last window can never be closed, and closing the window the agent runs in asks first
- The violet agent-to-agent message toast now links both task names in its header and adds one compact row of sender, Agent traffic and recipient buttons, so you can jump straight to the task that wrote, the one it wrote to, or the traffic view; clicking the card itself still opens Agent traffic
- Shell panes get a new two-line zsh/bash prompt — angled segments with the task number, project, worktree-relative path, git change counters and the last command's duration, then a
└─▶arrow that turns red on failure, dropping segments in narrow panes instead of wrapping — and Settings → Terminal → Shell prompt lets you pick one of twelve zsh styles from a live preview, write your own from a copy of any of them, or keep the prompt from your own.zshrc - The ⇧⌘P command palette has a new "Find coordinator…" command that lists every active coordinator task across all projects, marks the current, disconnected, hibernated and hidden ones, and opens the chosen one without starting or waking anything
- The
/dev3-coordinatorskill now contains the complete coordinator brief and says when a project or Settings override replaces it, and the built-in brief makes a coordinator own a checkable outcome, delegate instead of reviewing its children's code, and message a task only to change or unblock its own work - The board and Active Tasks filter funnel gain a Type group (Standard, Coordinator, PR review), backed by a new
type:search token such astype:coordinatorortype:pr-review - Hibernated and disconnected tasks no longer clutter the Active Tasks sidebar: they are left out by default in every scope and come back with the existing "Show hidden tasks" eye, whose tooltip now counts them separately from tasks you hid
- Pull-request number badges on task cards, Active Tasks, the task info panel and git bar, and the PR status popover now follow GitHub's state colours: open green, draft gray, merged purple, closed red
- The PR review task type in the New Task dialog is no longer greyed out until a branch is picked: choosing it opens a Pull request field where you paste a GitHub PR link, and dev3 checks out its branch for the review (a paste resolves on its own)
dev3 remote --host 127.0.0.1(orlocalhost; envDEV3_REMOTE_HOST) keeps the headless server on loopback; the default stays0.0.0.0- Claude Code and Codex sessions in a dev3 task now start with the task's five newest notes, previewed inside a 6000-character budget with shortened notes labelled and
dev3 note show <id>named for the full text; Claude also gets them after/clear, after a compaction and on every/dev3reload - The launch picker now flags model presets the signed-in account can't actually select, so you no longer pick a Codex or Cursor model that fails on launch
- A task can now open a follow-up pull request after its first one merged or closed: Create PR comes back beside the finished PR's badge, Merge no longer points at the dead PR, commits made after a merge no longer trigger the "is the task complete?" prompt, and the replaced PRs stay listed under "Earlier pull requests" in the PR popover, in the archived task view, in search and in
dev3 task show dev3 doctorrun inside a git checkout now probes the repository and tells a deleted repo, a file-permission problem and an access denial apart — Git reports all three asnot a git repository— listing possible causes for a denial and naming the binary that hosts the terminal- Agents now get a dedicated
/dev3-artifactskill next to the dev3 protocol: the existing in-app report workflow (copy the task's starter, follow its AUTHORING.md, edit index.html and report.js, publish or version withdev3 show-artifact) in one discoverable place, with the boundary to/dev3-share-artifactspelled out - Coordinators can now use
dev3 agent spawnto add a managed agent to an existing task, just like +Agent in the UI
Fixes
- An explicit request for Markdown, plain text or no HTML now overrides the HTML-template default for reports: agents publish that format directly instead of calling it a conflict and asking the user to choose again
- The tmux window bar at the top of a task terminal now stays visible with a single window too, instead of appearing only once a second window opens, so the bar never pops in and out as windows come and go
- Markdown reports published with
dev3 show-artifactnow render with a readable text column, clear heading hierarchy, striped tables with a row hover, code blocks whose long lines wrap under their own indent (box-drawing diagrams keep their shape and scroll instead), styled task checkboxes, quotes and links with hover and keyboard-focus states, in both themes and on narrow screens - Dragging a project by its grip on the Overview list now moves the project instead of selecting text: the rows collapse to one line just after the drag starts rather than inside it, which had made the browser cancel every drag
- The separator in front of the shell prompt's timer segment no longer turns into a dark, flat notch in dev3's dark terminal: segment separators are now drawn without a white background, which the terminal repaints dark
- dev3 now writes its Claude skills, its
settings.jsonentries (dev3 CLI permission, sandbox socket, auto-mode exception) and worktree trust into the config dir a launch pins throughCLAUDE_CONFIG_DIR, instead of~/.claudethat such an agent never reads, and the statusLine wrapper finds your own statusLine there too - The model-picker availability filter now probes the same Codex binary and account a launch actually uses — honoring a custom binary path and a preset's baseCommandOverride, and the selected account's CODEX_HOME — and treats a logged-out Codex home (no or emptied auth.json) as "unknown" instead of trusting the bundled catalog it prints; a preset launching a different binary is no longer judged by the default preset's catalog
- dev3's background
git statuschecks now run with--no-optional-locks - Opening Go to Project (⇧⌘K), the command palette (⇧⌘P) or Find coordinator while another of them is open now replaces it instead of stacking a second palette on top; the new palette keeps keyboard focus and Escape returns focus to where you were
- On the full-screen task view, the button that brings the Active Tasks sidebar back now sits at the left edge of the git row, before Branch, instead of at the far right of the top row
- dev3's worktree permission (
Bash(dev3:*)) now always goes to.claude/settings.local.json, never to a committed.claude/settings.json - Agent instructions now explicitly route text-only dev3 reports through the artifact template when its styling is requested
- Creating a task whose clone paths hold a large tree (node_modules, build output) no longer freezes the rest of dev3: the copy-on-write clone now runs in a worker thread instead of blocking the app's main loop, and clone work across tasks preparing at once is limited to two copies at a time
- Sleep prevention on Linux now passes
--why=tosystemd-inhibit, which rejected the old--reason=flag, so the inhibit process exited at once and was respawned every 10 seconds - The macOS release gate that checks bun:ffi under the CLI signing recipe now runs clonefile through the shipped clonefile worker, so canary and stable macOS builds no longer fail on a
cp -cRfallback after clonefile moved off the host thread - The PR status popover now reads a merged or closed pull request as merged or closed, drops the auto-merge and mergeability rows that no longer apply instead of showing "Unknown", says "not loaded yet" when nothing has polled the PR, and tells you inside the popover when a Refresh could not reach GitHub
- Fix typing "f" (or using arrow keys) inside an image comment field toggling lightbox fullscreen or paging through images instead of entering the character, by having the lightbox keyboard handler skip while a comment input is focused
v1.56.0
GitHub ReleaseFeatures
- Add GPT-6.1 Sol to the Codex model picker with Bypass and Standard reasoning modes
Fixes
- Agent-to-agent message toasts now take a single slot: a newer message replaces the previous one instead of filling the whole stack, so success, error and warning toasts stay visible
- Settings → Terminal → Dim inactive panes now behaves as one machine-wide choice: the latest toggle, made in any running dev3 instance, applies at once to every tmux terminal in every project and is no longer undone when another instance starts, opens a terminal or switches theme
- The setup script (initial setup and re-runs) no longer runs under shell tracing (
-x/Set-PSDebug), which also traced the shell's startup files and printed any credential they exported, expanded, into the setup pane before the script could turn tracing off
v1.55.3
GitHub ReleaseFeatures
- Right-clicking a task — in the Active Tasks sidebar or on a Kanban card — now opens a full task menu: labels, priority, move to status or project, rename, copy deep link / branch / worktree path, Open in…, watch, hide from sidebar, hibernate and delete
- Agents can now share MP4 and WebM clips with
dev3 show-video file.mp4 --caption "...", and they play right inside the task's image viewer — same history rail, badge and captions, with play, pause, seek, fullscreen and download, and never an autoplay - The mobile terminal key bar gains a sticky Shift key: tap Shift, then an arrow, to send Shift+Arrow — so Codex's pending questions open with Shift+◀ and close with Shift+▶ from a phone
- HTML artifacts now bundle MP3, M4A, WAV and OGG audio like images and video: a report directory or
--assetscarries them, ordinary<audio>players load, seek and replay in the viewer, and<a href="audio/x.mp3" download>links save the file dev3 show-artifactnow accepts a.mdor.txtfile and renders it into the same artifact viewer, themed like HTML reports, so a text-only report needs no hand-written HTMLdev3 task show --jsonprints a stable, versioned object (raw description, overview, status, branch, labels…);dev3 message --ataccepts06:00Z,06:00+03:00and full ISO times, confirms in both local time and UTC with the message id, and newdev3 message --list/--cancel <id>manage pending scheduled messages- With "Record app freezes (macOS)" on, a capture triggered by a window that stopped responding now also saves the latest terminal output each pane was sent, pinned from the moment heartbeats went stale, so a renderer stuck inside a terminal write can be replayed offline
Fixes
- Artifact template pills, the eyebrow chip and the status chip now centre their label vertically, so a pill stretched to the height of the header action row no longer pins its text to the top edge
- A Codex task without a saved conversation ID no longer resumes with
codex resume --last, which could open a sibling task's live conversation - A backlog of held
dev3 messages that no longer fits one terminal read is now written to one file and delivered as a single pointer turn, instead of one message per minute; the user's own typing delays delivery by its real age instead of sticking to every later message - A
dev3 messageheld for an agent pane is no longer lost when the user is scrolled up in that pane (tmux copy mode) as the hold releases: it keeps waiting, without pulling the user out of the scrollback, and is typed once after they scroll back down - A task hibernated before being completed or cancelled no longer stays frozen in that column: completing it now clears the hibernated flag, and tasks already stuck that way are healed on load so they can be dragged or reopened again
- dev3 peek now captures with colour and drops an agent's dimmed ghost autosuggestion, so a coordinator no longer mistakes the faint echo of an already-delivered message for unsent input and wrongly reports "typed but not sent, press Enter"
- Moving a running task back to To Do now asks first
- Bundled terminal fonts now use FreeType rasterization with browser fallback on glyph errors, removing the heavier, fuzzier appearance beside native terminals
- Opening + Agent no longer freezes the app while it measures the task's conversation for "Continue this task's conversation": only the newest transcript is read, it is parsed in a background worker instead of on the thread that serves terminals, and reopening the dialog reuses the result
dev3 task move --status completed|cancelledno longer dies with "Empty response from server" when its connection to the app drops mid-wait: it asks the app where the request stands and re-attaches to a still-pending one without opening a second dialog- GUI edits to task notes, task labels and project labels now reach other open windows, browser sessions and peer app instances immediately, and the GUI and
dev3CLI share one implementation of the title, overview, completion-policy, note and label rules - Long non-ASCII text sent through the
dev3CLI (notes, task descriptions, messages) no longer comes back with�inside words: the app now decodes a request only once all of its bytes have arrived - Correct local agent cost accounting for Claude cache writes that omit a TTL breakdown, including mixed and partial TTL buckets
- Launching many tasks at once no longer drops one of them when another git process holds the repository config lock: worktree creation now retries with jittered exponential backoff for up to 8 attempts or 12 seconds, also rides out a sibling worktree that is still initializing, and says how long it waited when it finally gives up
- The "Send message later" dialog no longer throws away a typed message on Escape, a backdrop click, a text selection released outside the dialog, or Cancel — it now asks "Discard this unsent message?" with Keep editing / Discard message, and it cannot be dismissed while scheduling is in flight
- Changing the priority of one task variant no longer changes it on every other variant of the same task, so priority can mark the variant you prefer
- Agents now publish ordinary dev3 HTML artifacts and routine revisions straight away instead of opening them in a browser and sweeping phone and desktop sizes first; the artifact starter's AUTHORING.md keeps a seconds-long syntax check and names the few cases that still earn one browser pass (a large first publish, custom layout or interaction, a reported rendering defect, or an explicit request)
- The Status filter on the board and in the Active Tasks sidebar no longer shows tasks from an unchecked custom column just because their underlying built-in status is selected; a custom-column task now matches only its own column
- Pressing Diff while an artifact is docked beside the terminal now shows the diff: the artifact panel waits hidden and comes back when you return to the terminal, instead of jumping out as a popup over the diff
- Selecting text in a task terminal now only copies it: the floating
Commentbutton that appeared over the selection is gone - A task whose worktree directory survived while its
.gitlink did not could never finish tearing down:git worktree removerejected it on every app start, so the task stayed intearing-downand the same error came back at the next boot forever - A Claude reviewer started by hand in the AI Review column now moves the task to Your Review when it finishes its response, even with Automatic AI Review turned off; before, the task stayed in AI Review under Waiting until the reviewer process exited
- A
dev3://task/…link printed in terminal output is now a Cmd/Ctrl+Click link that opens the card in the app, both as plain text and as an OSC 8 hyperlink target whose visible label says something else - Model proxies are signalled immediately when dev3 quits, including during startup
v1.55.2
GitHub ReleaseFixes
- The Codex default goes back to GPT-6 Astra Bypass at Medium effort, because some ChatGPT-account logins reject GPT-6 Sol with a 400
- A Codex conversation resumed in a new pane is now followed by its hook, and a task whose pane list was emptied re-records its own agent's running conversation
- The task header read a task's config from the worktree alone, so a
devScriptorsetupScriptset in the main checkout's gitignored.dev3/config.local.json— a file a worktree never receives — looked absent and the header offered "Setup Dev Server" for a project whose dev server started fine
v1.55.1
GitHub ReleaseFeatures
- Claude Opus 5.5 (
claude-opus-5-5[1m], 1M context) gets the full preset set — Auto and Bypass at Medium/High/X-High effort plus Default, Plan and Accept Edits — listed above Opus 5 in every mode group, and new installs launch Claude on Auto (Opus 5.5, Medium) - Codex gets GPT-6 Sol (Low through Ultra effort, plus the Plan and Plan → Bypass workflows, which move from GPT-5.6 Sol) and GPT-6 Luna (Medium through Max) presets, and the Codex default becomes GPT-6 Sol Bypass at Medium effort, with GPT-6 Astra moving to its own Bypass Medium row
v1.54.2
GitHub ReleaseFeatures
- Every surface an agent's output shows on now takes a review comment: click an element of an HTML artifact, drag a region on a shared image, select text in a previewed file, or select text in the terminal and hit the Comment chip — all through the same composer as diff comments
- Oh My Pi (
omp) tasks now move between columns on their own: dev3 loads a generated status extension into every omp session, which reports prompts, tool activity, approval waits and the agent stopping to the board, and records the session id so recovery resumes the exact session - New installations start with Simplified Mode and receive occasional invitations with a compact preview of parallel agents, scheduled messages, and productivity stats to explore the Full interface after active use
- Add per-control hiding: right-click any of a set of advanced controls to hide it (touch/remote get an inline Hide icon instead), and restore it later from a single restore control — one in the task inspector's chrome (grouped by bar, with a "Show all"), one folded into the header's kebab for its three hideable controls
Fixes
- Every project-scoped CLI command now resolves its default project from where the shell is: the task worktree as before, and additionally the registered project whose checkout contains the cwd, so
dev3 label listordev3 tasks listwork from a plain clone instead of answering "could not detect project" - Headless remote servers now update safely around running agents: detached helper restarts preserve them, while supervisor-managed restarts wait
v1.54.1
GitHub ReleaseFeatures
- Oh My Pi (
omp) is now a first-class coding agent with its own presets, so launching it no longer needs a hand-built custom agent - The task header's Hibernate and Send later buttons kept static glyphs while every icon beside them acted out its operation on hover: the skull now sinks and dims as the session powers down and its crossbones fold in, and the alarm clock runs a whole turn ahead before its bells ring
- Recording local macOS freeze diagnostics moved from the DEV3_DEBUG=1 environment variable to a switch in Settings → System → Advanced Experience, so it works the same whether the app was opened from Finder, the Dock or a terminal
- Right-to-left reordering in terminal panes (BiDi) now ships on instead of being an opt-in beta toggle, so Hebrew, Arabic and Persian output reads correctly out of the box
- Clicking the violet agent-message toast now opens Agent traffic with the receiving task already selected — highlighted on the stage, inspector beside it, camera walked over to it — instead of dropping you on the whole scene to hunt for the card the toast just named
Fixes
- An older dev3 wrote a permission profile into
~/.codex/config.tomlnarrower than Codex's own default, which stops standalone Codex from starting a session on a Homebrew install with `sandbox-exec: execvp() .. - Codex on macOS could not start a session when its permission profile lacked full-disk read, dying with `fs sandbox helper failed ..
- Terminal glyphs on macOS rendered noticeably heavier than the same font in a native terminal, because the glyph atlas rasterised them on detached canvases that never received the app's font-smoothing rule
- Bulk conversation import no longer skips Claude Code sessions that carry no
ai-titlerecord — desktop-app sessions and plenty of CLI ones never get one, and all of them were silently invisible on the import list - File paths under the OS temp directory (
/tmp,$TMPDIR, and their/privatespellings on macOS) printed in terminal output now become Cmd/Ctrl+Click links, so screenshots and scratch files that agents such as Codex park there open like any worktree path - Revert the readiness gate from PR #1792 because reconnecting to existing terminals and manually resumed agents could leave message delivery permanently blocked as still starting
- In the Agent traffic view, double-clicking a task now opens that task — on its stage card, on its row in the inspector's Tasks list, and on its node or label in the 3D orbit
- The completion dialog no longer claims commits "will be lost" when another branch, tag or remote-tracking ref still reaches them, which is what happens after a task branch is merged into the local base but not pushed
v1.54.0
GitHub ReleaseFeatures
- A project can now declare any number of dev servers by name, each with its own script, ports, environment and working directory
- A new bundled
/dev3-coordinatorskill turns the task an agent is already working in into a board coordinator without restarting it — the conversation, the work already done, the branch, title, labels and priority all stay as they are - If a window stops responding for 20 seconds with an HTML artifact open, dev3 records it locally and turns the "Open artifacts in a popup" setting on at the next launch, before any artifact reopens, then says so once in a toast that links to the setting
- The launch dialog's account line is now always shown for Claude and Codex, instead of only when two or more accounts are registered — so a user with a single login can still read that account's 5h/7d usage while choosing which harness and model to launch
- The rendered Markdown diff no longer prints the whole document for a small edit: unchanged prose far from any change folds into a row that says how many lines it hides and which section they sit in, and clicking the row unfolds it in place
- The completion-ownership control in the task bar now reads as a deliberate mode instead of another blue toggle: while it is on the chip turns amber, spells out "I'll complete it myself" and fills the owner badge on its icon, while off stays a quiet grey person
- A task card in Agent traffic no longer snaps to its new status: the status colour fades over 700ms across the whole card — wash, top rule, rail, dot, stamp and the zoomed-out cell fill — the status word cross-fades over the one it replaces, and the card flies to its new slot along an arc instead of teleporting, since that slot is its Kanban column — over the top when it heads left, under the bottom when it heads right, round the left going up and round the right going down, so two cards trading places pass on opposite sides
- GitHub Copilot CLI is now a first-class dev3 harness: it appears in the agent picker with launch presets, resumes the exact session it left, moves its task between board columns through Copilot's own lifecycle hooks, and receives the dev3 protocol out of band so scratch and resumed sessions get it too
- Selecting a task in the Agent traffic inspector now offers a Terminal snapshot: an explicit, refreshable text read of that task's terminal through the same
dev3 peekcontract the CLI uses, so you can see what an agent is doing without opening the task - A task's dev server now mirrors everything it prints to
<taskDir>/logs/dev-server.log, beside the worktree so it never appears ingit status - Double-clicking empty space in any Kanban column now opens the New Task form, not just in To Do — it behaves exactly like Cmd+N wherever you click
- The Agent traffic inspector gained a Conversation tab: pick a task and read what its agent and you actually said, beside the messages agents sent each other
- The Agent traffic replay transport now carries a time ruler under its track: drag across it to select an interval, drag the band to move that interval through history, or drag either end to grow and shrink it, with the arrow keys doing the same from the keyboard
- The Agent traffic inspector can now send a short plain-text message to the selected task without opening it: type, press ⌘/Ctrl+Enter, and it goes in as your own message — the same delivery the diff viewer's "Send to agent" uses, so it shows up on the map from the You endpoint
Fixes
- An agent's approval request (complete, cancel, launch) is now pushed to the app on every attempt rather than only the first, and a client that reconnects asks again for whatever is still pending — so a retry re-draws the dialog instead of blocking ten silent minutes when the original push was missed
- Codex question tools now move tasks to Has Questions automatically
- Codex Resume uses the shared account-store paths to find the exact saved conversation across local account stores and launches it with its original home, including older tasks without a saved account
- The built-in Cursor Agent presets pointed at model ids the CLI no longer serves, so a launch failed immediately with "Cannot use this model"
- The artifact viewer's CSS
url()asset rewrite matched case-insensitively inside JavaScript identifiers and always emitted lowercase, so a report callingURL.createObjectURL(...)was rewritten tocreateObjecturland failed to start - Agent traffic no longer presents a hibernated task as a running one
- Clicking a notification about a message between agents now opens the agent traffic screen across all active projects instead of filtering it to the board you happened to be looking at, so traffic from another board is no longer hidden on arrival
- "Open task" in Agent traffic used to send a completed or cancelled task to the Active Tasks pane, which has nothing to show for a task with no terminal, so the click looked like it did nothing
- Canary publishing stopped producing builds because two Windows-only test failures broke the packaged Windows proof that gates every canary build job
- Codex version and capability checks now run asynchronously with a two-second timeout, preventing a stuck check from freezing the app during startup or terminal restoration
- A task completed from the CLI, an approval dialog or a branch merge now chimes once even with several app windows open — the completion sound is delivered to the focused window instead of every window
- Creating a task into another project from the New Task dialog and launching it immediately no longer drops its card onto the board you were looking at
- ⌘F (Ctrl+F) now opens a find bar inside the file preview opened from a terminal path click, searching both the raw listing and the rendered Markdown, with match counts, next/previous stepping and Escape to close
- Claude's dev3 protocol now reaches the agent as a file on macOS and Linux too, not only on Windows
- Fixed the browser remote mode showing the phone terminal composer and extra-key bar on touchscreen laptops and desktops: the mobile input stack now requires touch to be the device's primary pointer (a coarse-pointer media query), not merely a touchscreen being present
- In Agent traffic, a project name no longer runs through its neighbour's at strong zoom-out
v1.53.0
GitHub ReleaseFeatures
- Agent traffic (Experiment 2) no longer draws every connection on one shared trunk: wires leaving a card fan out across its edge, each takes its own bus line in the corridor below, and each connection keeps a stable colour from a new set of 16 categorical wire tokens
- The completion celebration in the Agents View now runs a full three seconds instead of a little over two: two waves of confetti over the finished card, three small fireworks going off around it, and a soft fade out instead of a hard cut
- New
dev3 pr create --title "..." [--description "..."] [--base <branch>] [--draft] [--auto-merge[=squash|merge|rebase]]anddev3 pr auto-merge [<number|url>] [--strategy <m>] [--off]: the first pushes the branch checked out in the worktree, opens the pull request throughgh, targets the base branch the task was created from and appends the origin-task footer unless the user turned it off; the second sets or clears auto-merge on a pull request that already exists - Rendered markdown documents — the diff viewer's whole-file preview and the file preview a Cmd/Ctrl+Click on a terminal path opens — now use a real document type scale instead of the compact PR-comment styling: bigger body text, breathing room between blocks, a heading hierarchy with accent rules, borderless code chips, zebra tables with an accent-tinted header, accent list markers and checkboxes, and one frame around a code fence instead of three
- Every standard form control in the artifact template is now skinned on the element itself instead of only inside a
.fieldwrapper, so a bare<textarea>or<select>an author drops into a report matches the rest of the shell - Agent traffic replay now shows the board as it was, not as it is: while the cursor stands in the past, each card carries the status and column it had at that instant, rebuilt from recorded board moves, and a task appears on the stage at the moment it was created instead of sitting there from the start
- Agent traffic is a routed screen instead of a fullscreen popup: it opens under the normal app header with working Back/Forward and a breadcrumb, so ⌘1–9, the palette and the go-to chords no longer navigate behind it
- A task reaching Completed now gets a short confetti burst on its card in Agent traffic, with a badge naming the elapsed wall clock and where it is measured from — since work started, or since the task was created, and no number at all when the recorded movement log cannot prove either
- Agent traffic and its log are now on out of the box instead of hidden behind an off-by-default beta toggle
- The recommended presets now run DeepSeek V4.1 Flash on the everyday slots, replacing GLM 5.2 and DeepSeek V4 Flash 0731: one model that is cheap enough for the workhorse slot and strong enough for the one you escalate to
- Project Settings → Project Config now carries a "Use repository dev3 configuration" switch, on by default
- A
dev3 notifythat fires while Agent traffic is following live now previews over the card that sent it, the same cloud the replay cursor already drew, and clears itself a few seconds later - Agent traffic now previews an archived
dev3 notifyover the card that sent it while the replay cursor stands on it — the text, plus its level as a word and a colour, in a cloud outline of its own so it never reads as one more message between two cards - The notification preview on the Agent traffic stage now trails two shrinking puffs out of its card-facing edge, so it reads as belonging to the one card that sent it rather than floating above the whole row
- Zoomed all the way out on the Agent traffic graph, a card used to be an anonymous coloured rectangle
- Agent traffic's node stage now orders task cards by their own Kanban column instead of by seq alone: the column nearest the coordinator is the one the board puts first, so active work sits closest and Completed/Cancelled trail at the far end
- Recorded
dev3 notifyrequests now ride the Agent traffic replay timeline beside messages and board movements, so an hour where only a notification fired still replays step by step - The "Sessions keep running" quit confirmation now shows a 10-second countdown and confirms the quit on its own when nobody answers it, so a quit triggered while you walk away no longer parks the app on a dialog
- Every window open at shutdown now reopens where it was — its own position, size, screen and macOS fullscreen state — instead of only the last focused one
- Prompts you type into a task's terminal now appear in Agent traffic as your own messages, on Claude Code and Codex
- Messages you send to an agent — the diff viewer's "Send to agent" button and the "Send later" modal — now appear in Agent traffic as coming from you, live and in replay, with a "You" marker flying its message to the recipient card
- Added a read API over the notification archive
dev3 notifyalready writes: a paged, newest-first reader with per-project scoping applied before anything reaches the wire, its RPC method, and a renderer store that caches a page and refreshes when this instance appends a row - Task cards in Agent traffic (Experiment 2) now read like the compact Active Tasks rows they represent: the lifecycle rail with its stage ring runs down the left edge, the status colour washes the whole card instead of only marking its top edge, and the title, status word and overview are set at the same pitch as everywhere else in the app instead of poster-sized
- Agent traffic's project filter gained an "All active projects" scope and opens on it, so boards with no recorded event in the chosen window no longer take up the stage
- Clicking the violet toast that reports one agent writing to another now opens the agent traffic screen when the traffic beta is on, so the sender, the receiver and the full text are all in front of you instead of just the receiving task
Fixes
- A clone path that failed to copy into a new worktree used to be logged as copied and silently missing; the copy's exit code and stderr are now checked, logged as an error, and shown on the task as a dismissible notice in the terminal
- A narrow artifact panel no longer clips its toolbar: every control except Close now sits in a horizontally scrollable row, Close stays pinned at the trailing edge, and the artifact counter no longer wraps onto three lines
- The auto-approve delay in Settings is now entered as three plain fields — hours, minutes and seconds — instead of an amount paired with a unit dropdown, so a value like 1h 30m no longer has to be converted to minutes by hand
- Codex draws decorative "Astra composer stars" behind the input and repaints them every 150ms for as long as the composer is visible, so an idle pane streams around 187 KB every 20 seconds for nothing
- A local dev launch (
bun run dev,bun run start, the task dev server) now opens its window without activating the app, so starting a dev build no longer pulls you out of a fullscreen app or switches your macOS Space - The "Agent wants to start this task" dialog no longer starts the task on its own once you have touched it: the first click or key press cancels the countdown for good, on the timer that actually launches, and the dialog then waits for an explicit Launch or Decline
- The launch dialog opened from New Task (Scratch Task / Save & Start) now follows preset changes live instead of showing a snapshot taken the first time that modal was opened in the session, and starring a preset in Settings reaches every surface at once
- "Load available models" in Settings → API models no longer waits for you to start the model proxy by hand — the backend already starts it on demand, so the button now only needs a saved provider, shows that it is working while the proxy comes up, and stays clickable to retry after a failure
- Agents no longer split a pane for every long command: the injected protocol and the
/dev3-tmuxskill now treat your own shell as the default and reserve a pane for what the user asked to watch or for a process that must outlive the agent's turn - A task whose branch had not written a single commit could be told its branch was merged and be offered completion, because the merge check read the empty diff against the base as a delivered merge — most visibly in projects with no remote
- Starting a replay in Agent traffic while the screen was still loading froze a timeline that had only messages on it, so recorded board movements and notifications never played back until a filter was toggled or Restart was pressed
- The left task list now scrolls just enough to keep the selected task visible when a status change reorders it — sending a message to an idle task no longer makes it vanish below the fold
- Escape inside a task view no longer steps back to the board — it belongs to whatever runs in the terminal, so interrupting an agent with Escape can no longer throw you out of the task
- The Agent traffic node stage painted every card from a layer that measured zero by zero, because the scene and its card container had no size of their own while all their contents were absolutely positioned
- In Agent traffic, the person and their speech bubble now step aside to the nearest free space when the card above their recipient is taken — a short dashed tether keeps the recipient unambiguous — and the bubble shows four whole lines instead of two plus a sliced third
- The Agent traffic scope title and its hint no longer sit under the "N tasks with no messages" pills: the summary row keeps its own surface above the stage at every width instead of floating over it
- On the Agent traffic graph the "You" marker now sits above the coordinator and the task cards instead of being parked at the end of the card grid, and the bare message-count number is gone from both the user marker and the task cards — the count carried no label and the wire thickness already shows message volume
- On the Agent traffic graph you are no longer a card in the grid with permanent wires fanning out of it
- Claude Code no longer blocks dev3's own lifecycle commands: dev3 declares the CLI to the auto-mode classifier in
~/.claude/settings.json(the only scope that gate reads), keeping the classifier's built-in rules intact, and a task worktree now allow-lists both spellings of the CLI — the baredev3the protocol asks agents to type and the absolute~/.dev3.0/bin/dev3(or quoteddev3.exeon Windows) that dev3's generated skills and hooks put in front of them - Agent traffic (Experiment 2) no longer opens on a stage of blank coloured rectangles: the automatic overview stops at the zoom where a card still shows its number, title and status, and pan, zoom and Live Follow reach the rest
- Dropping a file into a terminal now inserts its worktree path with a space on each side, so it no longer glues onto whatever you had already typed — and no extra space is added when the cursor already sits after one
- The violet agent-message toast no longer appears in a window that is already showing the Agent traffic screen, where the same message lands in full
- Agent traffic cards no longer clip their title, overview or last message in the middle of a line: the card box is tall enough for every row it draws, the coordinator card is no longer shorter than the workers it sits above, and the "Earlier history missing" line is gone from the card entirely
- Opening Agent traffic now lands on Live with the camera following instead of automatically replaying the trailing hour; replay is still one press of Play (or the toolbar's Replay), and it still starts at the beginning of the window
- Agent traffic's toolbar no longer loses controls as the window narrows, in any of the three languages: the live readout and the stage action keep their place instead of being squeezed away, the filter selects give up their width first, the button groups wrap to the next row rather than painting over each other at phone width, and below 1200px the filters move into the sheet the screen already had
- Fixed the Bedrock model ids dev3 derives after launching every preset against the real endpoints: Codex now routes through Bedrock Runtime with a <geo>.openai.<family> inference profile (the default gpt-6-astra preset was a 404 on the previous provider) and gets the same region selector as Claude; the haiku and opus-4-6 aliases use Bedrock's dated ids; the dead apac region option is replaced by jp; rows a region does not serve are marked in Settings; the misleading ~/.codex/config.toml warning is gone
- An agent's approval dialog no longer closes — and no longer counts as a decline — when you click the empty space around it
- Agent traffic's node stage no longer drops a project whose tasks exchanged no messages in the window, so each visible project keeps its own named block with ordinary task cards instead of vanishing, and the project that did carry traffic keeps its group label
Refactors
- Agent traffic no longer draws its own title row: the route's breadcrumb already names the screen, so the live/history readout and the stage action (Replay in Experiment 2, the animation toggle in Experiment 1) now ride at the end of the existing filter toolbar
v1.52.0
GitHub ReleaseFeatures
- Agent traffic defaults to Experiment 2 with named project blocks, five-card rows below each coordinator, message replay, calibrated 0.25×–8× speed/step controls starting at a calmer 1×, Follow/Focus and draggable minimap navigation; wires avoid cards and carry violet drops (red on failure), and messages without a sender task reveal their recipient with a text-only speech bubble
- An HTML artifact opens in the resizable panel to the right of the task terminal again, so a report can be read beside a live agent
- The delay before an agent-launch request approves itself is now an amount plus a unit, so 15 seconds, 10 minutes and 1 hour all work instead of a fixed list of whole minutes; "never" stays its own switch
- Every
dev3 notifythe app handles is now written to~/.dev3.0/notifications/YYYY-MM-DD.jsonlwith its time, level, surface (toast or desktop), the task it points at, the worktree it was sent from and what the app actually did with it — delivered, queued behind Focus Mode, or dropped because no window was open - The default coordinator role prompt now has a VARIANTS section: a coordinator must never tell a variant that a sibling exists, pass its findings, progress or artefacts, or invite variants to work together, and the child-to-child facts and overlap rules explicitly stop at a variant group
- Started a task, then set it aside for something more pressing? Click the eye on its sidebar row to drop it out of Active Tasks until you pick it up again
- HTML artifacts now bundle local MP4 and WebM clips:
dev3 show-artifactcollects them from a report directory or an explicit--assetslist, and plain<video controls playsinline>markup with<source>alternatives and a local poster plays in the viewer, in the popup, in the browser and inside the downloaded ZIP
Fixes
- Launching a Codex preset whose model the installed CLI predates now prints a dev3 notice naming the installed version, the version the model needs and how to upgrade, instead of dying on an opaque upstream 400
- Overlapping confirmation dialogs now queue instead of replacing each other
- Terminal rows are now spaced the way the font was designed to be set, instead of being derived from the ink of a capital "M" plus a guess: at font size 16 JetBrains Mono goes from 17 px to its designed 21 px, so descenders no longer touch the next line and the terminal matches Ghostty, Terminal.app, iTerm2 and VS Code at the same nominal size
- Terminal cell width is now quantized on the device pixel grid the way native Ghostty does it, instead of being rounded up in CSS pixels: at font size 16 JetBrains Mono goes from 10 px to Ghostty's 9.5 px per column on a 2x display
- The agent traffic stage no longer wastes a large display: the overview zoom was capped at a flat scale calibrated for a laptop, so on a 4K screen the whole graph sat at laptop size in a stage more than twice as wide, and Follow centred on one exchange with a blank band above it while the rest of the graph hung off the edge
- Links inside a rendered artifact used to be dead clicks — the sandboxed frame blocked them
- An artifact panel left open in one task no longer reappears as a centred popup over an unrelated board when you switch tasks or projects — it waits hidden and comes back, with its document, version and unsent draft intact, when you return to that task
v1.51.3
GitHub ReleaseFeatures
dev3 eventsnow carries board movements alongside notes: a task being created, changing column (completion and cancellation included), or moving into a custom column- An agent can now clean up a task it should not have created:
dev3 task move --status cancelledasks the user for approval instead of being refused outright - A task launched by a peer agent now hears, in its very first message, that its description is the brief and that progress and results go into a file under its own task directory — it messages the launcher only the absolute path
- Added GPT-6 Astra at the top of the Codex presets, with Medium reasoning as the default
- Experiment 1 in Experimental features enables the agent traffic icon, which opens a live 3D orbit of real tasks, coordinators, and recorded messages, with the last 24 hours loaded immediately
- The tmux Sessions popover now sorts by memory (default) or CPU, heaviest first, and the numbers go live while it is open — the resource monitor drops from a 10-second to a 2-second tick and pushes each session's CPU and memory as they move, then lapses back on its own once the list closes
dev3 dev-server start --env KEY=VALUE(repeatable, and the same onrestart) passes extra environment variables to the project's dev script, so a dev server can be booted on a different configuration without editing.dev3/config.local.json- On touch devices the terminal now shows a round scroll-to-latest button over the canvas whenever the pane is scrolled into history, and a tap returns to the live output (leaving tmux copy-mode or scrolling the native buffer to the bottom)
- The default Coordinator role now begins a turn by reading
dev3 eventsfrom the cursor it saved last time, drains every capped page, opens the notes that matter in full, and advances the cursor only after consuming the results
Fixes
- HTML artifacts from
dev3 show-artifactnow open the same way images do — a popup over the task, closed with Escape or a click outside — instead of a panel docked beside the terminal - HTML artifacts render inside the app window again instead of in a separate native webview layer, which could paint an opaque rectangle over the artifact popup and over menus and toasts drawn on top of it
- The low-battery answer format no longer installs itself: a fresh install ships nothing, selects no Claude Code output style, and adds no line to ~/.agents/AGENTS.md until you turn it on in Settings → Agents → Low-battery answer format
- The agent-message toast no longer wraps the message preview in typographic quotes — the preview reads as plain text in all three locales
- The
test:pane-e2epane-exit reconciliation suite died at import time because its preload mockedagents.tsanddata.tswith hand-listed exports that had since fallen behind the real modules - A terminal that exited kept looking alive in a browser or on a phone: the desktop app announced the death to its own windows only, so the remote view sat on a bare
[exited]with no "Terminal session ended" screen until a reload - The live terminal e2e gate now proves a leaked tmux server by connecting to its socket instead of relying on how tmux happens to name itself in the process table, and reports it with the socket name and the command that clears it
v1.51.2
GitHub ReleaseFeatures
- Each desktop window now shows what it displays in its native title bar —
<task> · dev-3.0on a task,<project> · dev-3.0on a board — so a multi-monitor layout of several windows is tellable apart in the title bar, Mission Control and the Window menu - The header's project switcher now opens with a search field: type to fuzzy-filter the list by project name or by the name of a space it belongs to, walk the matches with ↑/↓ and open one with ⏎
Fixes
- Messages sent between tasks with
dev3 messageno longer lose their beginning: text is pasted into the receiving agent through a tmux paste buffer instead of typed, so a long message arrives as one atomic paste rather than as several ~1 KB fragments the receiving CLI could drop one of - Tripled the renderer RPC request timeout from 2 to 6 minutes so cloning a large repo through the Add Project dialog no longer fails with 'RPC "cloneAndAddProject" timed out'
- Fixed Codex tasks failing to launch with "invalid transport" when a per-theme dev3 profile still held an approval table for an MCP server that had left the config; dev3 now prunes those orphaned
mcp_servers.*entries at startup and before every Codex spawn - The pending-message popover on a task card and in the session bar now leads with the sender's one-line subject instead of the raw message body, with the full body still available on hover
- A
dev3 messagebetween two tasks no longer types anything longer than one terminal read: past 1 000 bytes of the whole envelope the body is written to a file and the agent is handed the path, and a burst released together obeys the same limit instead of merging into one oversized stream - Settings → Terminal now ships unpatched JetBrains Mono as its own option, and every bundled Nerd Font says so in its name — "Hack Nerd Font", not "Hack"
v1.51.1
GitHub ReleaseFeatures
- Claude Fable 5.1 joins the built-in Claude presets on its 1M-context alias (
claude-fable-5-1[1m]) with Medium/High/X-High effort tiers for Auto and Bypass plus Default, Plan and Accept Edits, listed above Fable 5 in every mode group dev3 show-artifact ./dev3-artifact-report --title "…"now publishes a whole report directory —index.htmlplus every CSS, JS and image under it — instead of a six-line command naming each asset- A project can belong to several spaces, and the header used to forget which one you came through the moment you opened a task — the Active Tasks sidebar then pooled every space the project belongs to instead of the one on screen
Fixes
- The coordinator preamble is regrouped into five headed blocks (role, reporting, relaying, permissions, the board block), gains a template for briefing child tasks and treats a child's "done" as a claim until the artefact is seen, and no longer assumes the user's gender
- "+ Agent" with "Continue this task's conversation" now hands the new agent its pointer to the retelling as the launch prompt, so reading it is the agent's first turn
v1.51.0
GitHub ReleaseFeatures
- The conversation import now offers Codex rollouts alongside Claude Code ones, from
~/.codex/sessionsand from every dev3 agent account - "+ Agent" can now hand the new agent the conversation that has been running
dev3 import, run from an agent's own shell, puts that conversation on the board as a task- The Active Tasks sidebar now shows each task's pull request the way the board does: number, merge state, review verdict and unresolved-comment count, hovering any of them for the checks breakdown and clicking to open the PR
- Every file of user state in ~/.dev3.0 now gets the hourly safety copies that projects.json already had — spaces, settings, agent presets, Operations boards and the model catalog, each with a last-known-good copy that rotation can never evict and that refuses to advance onto a collapsed file
Fixes
- The AI Review column's default prompt showed garbled characters instead of dashes ("worth surfacing â add a short"), and 44 more mangled arrows, degree signs and dashes sat in the same file's comments — a commit two months ago had re-saved it with the wrong text encoding
- Terminal file paths that agents wrap in OSC 8 file:// hyperlinks (Claude Code does) showed a hover underline but a dead click: the link provider accepted only http(s) URIs
- Several
dev3 messagedeliveries that land inside one quiet window are typed as a single agent turn, and until now they arrived welded together — the closing tag of one report and the opening tag of the next sat on the same line, so a coordinator reading a multi-part report could not tell where one child stopped and the next began - A
dev3 messageover 1 500 bytes now also lands on disk next to the receiving task, and the envelope names that copy on its last line, just before the closing tag - Filling in a form inside an artifact and then having the agent publish a new version used to wipe what you had typed, with no warning and nothing to recover
- A plain table in a dev3 HTML artifact card no longer overflows its panel: the shell now makes the table's own parent the
dev3-tablequery container, so the documented stacking into labelled lines works without an opt-in wrapper class - On macOS the artifact viewer now renders the report in its own webview process instead of an iframe, so an artifact that wedges its own main thread no longer takes the whole dev-3.0 window with it — the app stays responsive and you can close the report
- The task git bar could read "1889 ahead · 6 behind" for a branch that was two commits ahead: with a truncated local clone git finds no fork point and answers with each side's whole history instead of failing
- The project list is now snapshotted hourly (72 kept) alongside the existing daily copies, and both are driven by a timer instead of only by a save — an app left running for days previously snapshotted nothing at all
- The Remote Access dialog no longer runs off the top and bottom of the window once the access-code, tunnel and exposed-ports blocks are all present
- Re-publishing an artifact now moves its row to the end of the task's artifact list instead of keeping its original position
- Fix a pane whose conversation started in another directory silently getting a brand-new conversation on the first recovery
- On a trackpad a vertical two-finger swipe arrives with a horizontal delta of exactly zero, which is indistinguishable from a mouse notch — so the new mouse-wheel bridge grabbed it and pushed the Kanban board sideways instead of scrolling
- The Add Project dialog's space picker said "type a name to create one" but had no way to do it — no create row, and Enter did nothing, because the project it would belong to did not exist yet
- Closing one pane of a native task's terminal used to replace the whole terminal with the "session ended" screen when the pane happened to be the one the task was launched with, hiding panes whose agents were still running
v1.50.2
GitHub ReleaseFixes
- The built-in Coordinator preset prompt contained a sentence that Anthropic's safeguards flagged as a reasoning-extraction attempt, so every coordinator task launched on Opus died on its first message with an API refusal before the agent could do anything
- A
dev3 messagesometimes pasted its whole text into the receiving Claude Code pane without submitting it, and every later message then piled onto the same unsubmitted input box - Starting a task with several variants could fail with "could not lock config file .git/config: File exists", because the variants write their branch tracking config at the same moment
v1.50.1
GitHub ReleaseFeatures
- dev3 now ships the low-battery answer rules to every supported agent — a header block that re-establishes what the task is, the decision at the bottom, tables instead of prose — so a task you come back to after two days is readable in seconds
- Add a project and dev3 offers to import the Claude Code conversations that already ran in that folder and belong to no task: each becomes an ordinary task titled by Claude, described by a retelling of the conversation, labelled
imported, with work from the last week landing in Has Questions with its own worktree and older work in Completed - New
dev3 eventsCLI command: one feed of the notes recorded by every task on the board, including completed and cancelled ones whose worktrees are long gone - The remote-access static code is now a proper long-lived credential: it is typed on a browser sign-in screen instead of riding in the URL, it works alongside QR sign-in rather than replacing it, and you can set it in Settings → System instead of only through an environment variable
- The header rate-limit pill's panel now lets you switch the default agent account: it shows the same per-account quota cards for every Claude and Codex account, and each card is a radio row — pick one to make it the default for new launches, exactly as in Settings → Agent Accounts
Fixes
- The header rate-limit panel is about half as tall: each limit window is one dense "label · bar · % · resets in" line, the capture age rides that line instead of taking its own, an account with no reading says so on its headline, and the Account settings button at the bottom became a link in the header row
- A plain mouse has no horizontal axis, so horizontal-only containers were unreachable without a trackpad — the Kanban board simply would not move
- A remote-access port that was already in use used to take the whole app down a moment after the window appeared, silently killing task rehydration and every background scheduler with it
- Web Push could never enrol in a packaged build:
sw.jsandmanifest.webmanifestwere missing from the app bundle, so the service worker was served as HTML and refused to register - Starting or resuming an agent on Windows failed twice over: the command line was quoted for a POSIX shell, so the apostrophe in the dev3 system prompt ended the PowerShell string literal, and the prompt itself was longer than a whole Windows command line
v1.49.0
GitHub ReleaseFeatures
- An HTML artifact can now send text back to the agent that published it: report code calls
window.dev3.sendToAgent(...)from a button or form, and the answer lands in that task's agent pane tagged with the artifact and version the user was looking at - A space can now be the subject of the kanban board itself: a zoom-out button beside the project switcher (⇧⌘U, or pick the space in ⌘K), an "Open space board" button on each space's dashboard header, or a click on a space's heading in the project switcher opens one board showing every member project's tasks on one set of columns, with drag, filters and task creation working exactly as they do on a project's own board
- Task notifications can now leave the machine, so a blocked agent reaches you when dev-3.0 is closed and no browser tab is open: a command or webhook you configure in
~/.dev3.0/notifications.jsonreceives each one as JSON on stdin, and any browser served over HTTPS — including an iPhone with dev-3.0 added to the Home Screen — can register for Web Push, with the payload encrypted end to end so the push service relays it without being able to read it - Artifact reports are no longer two colors on a dark page: the
DEV3 ARTIFACTline is now a gold chip, panel headings carry a colored marker, KPI cards and toned panels wear their own hue on rail and edge, and a faint colored wash sits behind the whole page - Notification preferences now have a dedicated Settings → Notifications page for Focus Mode, default task watching, completion sounds, browser alerts, and Web Push
- Standalone Mermaid files (
.mmd) now render the same way markdown does: the file preview you get from Cmd/Ctrl+Clicking a path opens the drawn diagram with a Raw toggle, and in the diff viewer a changed.mmdfile gets the Preview toggle and shows the resulting diagram instead of raw diagram source dev3 task create --pr <number>now starts the task on the pull request's own branch — a fork too — so a CLI-created review task lands exactly where a GUI-created one does, marked as somebody else's codedev3 messagenow requires--subject: one line, about six words, 80 characters at most, stored with the message and rendered as the row in the agent-traffic readout and log instead of the head of the bodydev3 attention --cleartakes the red badge back down and drops every accumulated reason with it, so an agent that raised an alert during an incident can lower it once the incident is over instead of leaving a badge that outlives its causedev3 messagenow takes--variant <i>next to--task seq:<N>, so one member of a live variant group can be addressed by the number on its card instead of a 36-char UUID- Settings → Terminal has a new "Dim inactive panes" toggle
dev3 task createnow takes--type coordinator|pr-review|standard, the same valuesdev3 task update --typeaccepts, so a task can be created with its role already set instead of created and then updateddev3 tasks listnow prints a PRI column and orders each group the way the board orders a column — highest priority first, newest seq breaking ties;--sort seqrestores the old chronological order- Markdown links that agents print in the terminal (OSC 8 hyperlinks, e.g
- Settings → Terminal now ships the 15 most-installed Nerd Fonts — JetBrains Mono, Meslo, Hack, Fira Code, IBM Plex, Cascadia, Iosevka and the rest — so picking one installs nothing, and "Compare all 15 fonts" renders the same terminal block in every one, with clicking a row applying it live
Fixes
- A pane run that failed no longer waits for Enter forever — it closes itself after 30 minutes, long enough to read the output and short enough that dead panes stop piling up, while a successful run still goes after 10 seconds
- Hardened the remote-access static code (
dev3 remote --static-code/DEV3_REMOTE_STATIC_CODE) against brute force: the minimum length is now 8 characters instead of 4, and a code set straight into the environment below that makes the server refuse to start rather than silently ignore it - The agent-traffic pill next to the ⋯ button used to disappear the moment you looked at it, which meant hovering it to open the panel also took it away
- Images an artifact report builds from JavaScript now load in the in-app viewer instead of
silently breaking, both through the new
dev3Artifact.asset()helper and for reports published before it existed - A command an agent ran in a neighbouring pane (
dev3 pane run— builds, test runs) no longer parks the pane at "press Enter to close" once it succeeds: a run that exits 0 closes its own pane after 10 seconds - Claude Code refuses to start under root whenever bypass mode is reachable, which killed every session on a box running dev3 as root (a container or Kubernetes pod)
- Creating a task no longer kills a running
dev3 remoteserver on macOS, which dropped the connected browser or phone into "Reconnecting" - The completion dialog no longer claims commits will be lost when the branch was pushed to a differently named remote branch: it now asks whether the work is on any remote at all, instead of only looking for
origin/<branch-name> - A task's description is delivered as its agent's first prompt at launch and nothing re-delivers it, so rewriting a running task's brief changed the board while its agent never found out
- Running the dev loop (
bun run dev, ordev3 dev-server start) no longer overwrites the machine-wide~/.dev3.0/bin/dev3that every agent and terminal runs — a source run used to point it at thebunbinary (breaking every command withScript not found), and a local app build used to copy its own unmerged branch build over it silently - Analytics no longer looks up your public IP address from a third-party service, and no longer sends it to Google Analytics; any IP a previous version cached on your machine is erased on the next launch
- A window that reloaded while an agent was waiting for completion approval used to take the only copy of that dialog with it, leaving the agent blocked and the task unable to ask again for the rest of the app session
- Counts next to a noun no longer say "1 commits ahead" or "1 коммитов позади": 21 flat strings across English, Russian and Spanish gained proper plural forms, and the diff badge's hardcoded English "file/files" now goes through the translations
- The renderer test run printed 12 192 lines of output and now prints 589
- Tables in dev3 HTML artifacts no longer scroll sideways or drop columns on narrow screens
- Unix socket fixture paths in the test suites now come from one short, run-scoped socket root instead of the deep isolated temp dir, so they fit the kernel's 104-byte limit by construction
- dev3 no longer accumulates dead tmux socket files in the system temp directory forever: every test that mints a pid-keyed socket now unlinks it, and the app sweeps dev3-prefixed sockets with nothing listening on them once at startup
v1.48.1
GitHub ReleaseFeatures
- Telemetry can now be switched off in Settings → System → Telemetry, or from the environment with DEV3_TELEMETRY=off or DO_NOT_TRACK=1 — previously the only way out was a build from source
- Messages your agents send each other with
dev3 messageare no longer just a 30-second toast, once you switch the beta on in Settings → System → Advanced Experience → "Agent traffic readout and log" - Every message dev3 delivers to a coordinator task now ends with a
<dev3-board>snapshot: each task not parked in To Do, everything finished in the last 24 hours, and how long each one has been sitting in the column it is in - Settings → Terminal now has a Shell picker: automatic (your login shell, then whichever of zsh, bash or sh is installed) or a pinned zsh, bash or sh, with the picker naming any flavor this machine does not have
- When an agent asks to start a task, the approval dialog now lets you add variants before you launch — the same picker the manual Launch modal has
- Bring your own tunnel: a custom ngrok-like command configured in Settings → System now serves every tunnel dev3 starts — the remote-access URL and per-task exposed ports alike — while the built-in Cloudflare quick tunnel stays the default
- The task summary bar on a phone now carries a compact diff chip next to status, priority and the artifact/image readouts, so the diff is one tap away instead of hiding behind the kebab menu
- A "Clear all (n)" chip now appears under the toast stack whenever two or more notifications are on screen, so a pile that built up while you were away goes away in one click instead of five; hovering it pauses every toast timer so the button cannot slip out from under the cursor
- Every field that used to demand a hand-typed path now has a "Browse…" button
Fixes
- Fixed the landing page scrolling sideways on phones: the footer link row was a non-wrapping flex line that pushed the document 65px wider than the viewport
- The update-ready prompt and the toast stack no longer overlap in the top-right corner
- A panel dropped into an artifact's
.dashboard-gridwithout a width class used to land in a single column of the 12-column grid and render as an ~86px sliver with one word per line - The back, forward, project-switcher and variant-switcher chevrons in the global header now centre inside their buttons instead of drifting to the left edge
- The Codex hook-block tests hardcoded the POSIX spelling of the dev3 CLI, so they
failed on the windows-latest proof job where the generated command is a quoted
dev3.exepath with no shell guard - dev3's Codex status hooks are declared in
~/.codex/config.toml, which Codex loads in every session on the machine, so they were waking up — and spending a couple of hundred milliseconds per tool call — in Codex sessions that had nothing to do with dev3 - The built-in Coordinator prompt now tells the agent to keep its internal bookkeeping — relay chains, ruled-out hypotheses, child transcripts, self-correction — in its reasoning instead of the messages the user reads, and to keep each status to one line per task plus the pending decision
- On a phone the dashboard's project count, New space and Add project no longer share one cramped row — the count sits on its own line and the two buttons split the width below it, so Add project is never pushed off the right edge
- The update toast's 5-minute auto-restart countdown no longer runs while remote access is engaged — a public tunnel that is up or coming up, or any browser attached
- Releasing a task's ports no longer races a second app instance allocating ports at the same moment: the release now takes the same cross-process lock as allocation and re-reads the assignment file first, so a peer's just-persisted task can no longer be erased from port-assignments.json and its ports handed out twice
- The "Setup failed" popup used to claim the agent was never started and offer to start it anyway — but in the default parallel launch mode the agent is already running, and that button destroyed it along with its context
- Selecting a space in the rail or filter sheet now expands that space's group on the dashboard if it was left collapsed from a previous session, so filtering to a space no longer shows an empty collapsed header
- "Send to agent" under a review comment, "Send now" on a scheduled message, and the note a newly launched agent receives all go into the terminal the moment you click, instead of waiting for the pane to go quiet
- Terminal file links now resolve a file named without its directory — "architecture.md" for
docs/architecture.md— by matching it as a unique path suffix in the task's git file index, so an agent listing several docs no longer underlines only the one that happens to sit at the repo root
v1.48.0
GitHub ReleaseFeatures
- The sandbox now comes with a guide instead of an empty board, and it runs the whole loop end to end: a small card rings the button you should press, holds back the rest of the screen, says what that button does, and moves along on its own once the app moves — from New Task, through the prompt (already filled in), past the difference between Save and Save & Start, through the Launch dialog, to the agent working in its own terminal, the dev server serving the sandbox page, the report the agent publishes, the diff, Merge, and the "complete the task?" dialog that closes it
- On a fresh install dev-3.0 now opens in the language your system asks for — Russian, Spanish or English — instead of always English, so you no longer have to find Settings → Appearance → Language before discovering the app is translated at all
- Every message delivered into a task's agent is now recorded in an append-only per-project log at
~/.dev3.0/data/<project>/messages/YYYY-MM-DD.jsonl, so task-to-task traffic survives the 30-second toast that used to be its only trace - A task an agent asks to start now inherits the requesting task's priority instead of always landing on P3, and the launch approval dialog's priority badge became a picker, so you can set the band before the task starts
- Projects can now be renamed: Project Settings → Board → Project name, saved as soon as you press Enter or leave the field
- A PR-review task is now called "Review of #493 from Arseny Pavlenko about pin tmux to a vendored keg" instead of the first 80 characters of the review prompt, so several reviews on the board are finally distinguishable at a glance; a branch with no pull request falls back to the branch, its commit author and its subject
- Task search now finds a task by its pull request: type a number (
1488,#1488,pr1488) or paste the full GitHub PR link, on the Kanban filter bar and in the Active Tasks sidebar
Fixes
- Completing or cancelling a task while its view is open no longer leaves the terminal pane showing a "Task environment error / restart session" card for a worktree that was removed on purpose
- A cross-task agent message sent between two different projects handed the receiver a reply command it could not run:
dev3 messagescopes every request to the sender's own board, so the bare--task seq:<N>was looked up there and failed - The task completion and cancellation chimes are audible again in packaged builds: Web Audio produces no sound at all in the app's WKWebView, so the chimes play through a short audio element instead
- The artifact version popover now hangs under the version chip instead of the viewer header's right edge, clamped so it stays inside the docked pane, and a click anywhere outside it closes it — including over the artifact itself, whose sandboxed iframe swallowed those clicks before
- An incoming
dev3 messagefrom another task is no longer typed into the agent's input box the moment it arrives, so it can't get mixed into the line you are writing - Prefix-free tmux pane switching moved from Alt+arrows to Alt+Shift+arrows, and dev3's managed shells (zsh and bash) now bind Alt+arrows and Ctrl+arrows to word-by-word cursor motion — zsh binds neither out of the box, and macOS claims Ctrl+arrows system-wide for "move a space"
- The task-sound debug probe no longer reports a healthy pipeline while playing nothing, and the audio unlock handlers stay installed so a later click can recover a sound the browser refused
v1.47.0
GitHub ReleaseFeatures
- Projects can now be grouped into Spaces — many-to-many groups with their own ordering, surfaced as a dashboard rail that filters the overview (each rail row showing its needs-you/working split), collapsible group headers with per-space counts, membership chips and a Spaces… action on every project row, a search field matching space names, the active-tasks panel beside the overview showing work across all spaces, a space filter (including the computed Home group) in the task funnel, and space info with sibling paths in
dev3 current - A headless
dev3 remotebox keeps itself current: it checks every 30 minutes and installs the update on its own once nothing is in progress, no terminal is printing and no browser is connected — and the restart hands its port and live Cloudflare tunnel to the new build, so the public link and your open session survive it - Viewing dev3 over remote access now measures the connection's round-trip time and keeps it as a
Connectionrow in the header's overflow menu — hover it for the spread, the jitter, lost samples, and how much of the wait was spent on this computer versus on the network - Register the providers you pay for in the new **API models** section of Global Settings, ask them what they offer, give the models you want your own names, then bind those names to an agent's own roles in its preset — Claude Code's Opus/Sonnet/Haiku slots, Codex's main/subagent/review models
- The new-task popup now has a Task type selector — Standard, Coordinator, or PR review — sitting directly under the description instead of the old PR-review toggle hidden inside the branch block
- A small callout now appears beside the ? button in the header on the dashboard, board, task and project-settings screens, saying that it explains every screen — it goes away for good once you open help mode or close it
- The dashboard drops its cross-project task panel, which was listing the same waiting tasks the project rows already show, and every project row gains an "Open board" footer stating the work it is not showing (including how many tasks sit in To Do)
- When an agent asks to start another task, the approval dialog now starts a countdown and approves itself after five minutes, so a user who stepped away delays the launch instead of blocking it
- The task breadcrumb badge (
#1636-1) is now a switcher: with two or more live variants it grows a chevron that opens the variant menu, so jumping between attempts is one click from the header - The dev3 artifact starter now carries an A− / A+ text-size control beside the theme toggle: eight stops from 80% to 150%, the percentage readout doubles as reset, and the choice is remembered per browser
- dev3 now parses a task's Claude Code and Codex transcripts into one canonical model — turns, messages, reasoning, and tool calls reduced to agent-independent operations (Claude's
Bashand Codex'sexec_commandboth read asshell.run) — with the agent's own bookkeeping kept in a separate layer - Re-publishing an HTML artifact with
dev3 show-artifactnow adds a version to the artifact you already have instead of a new row, so a report revised twenty times is one row with a version switcher in the viewer rather than twenty near-identical entries - The header project breadcrumb became one segmented control — the project name and the dropdown chevron now share a bordered shell, the same grammar as the back/forward pair beside it, so the switcher is visible instead of being a 12px glyph nobody clicked
- The Active Tasks sidebar now opens on the Spaces scope when the current project belongs to a space, and on the project itself when it is standalone; an explicit scope you picked yourself still wins
dev3 messagenow types its text in at once but holds the Enter until the target pane has been quiet for 10 seconds, so a burst of messages — one agent writing three in a row, or several peers reporting at once — reaches the receiving agent as a single turn instead of interrupting it once per message- Kanban cards for active tasks with a dev script now carry a dev-server control: the left half shows the live state (running with its lowest port, starting, stopped, or a red port conflict) and opens that port in the browser, the right half stops the server
- The shared-images viewer now opens on the FIRST image of the batch an agent just published instead of the last one, rings every new image in the thumbnail strip, and states how many are new in the header
- The Remote Access modal now shows an explicit Stop tunnel button next to "Public tunnel active", so shutting the public Cloudflare tunnel down no longer depends on discovering that you have to uncheck the "Accessible from anywhere" checkbox
bun run dev --qanow launches the app against a throwaway data root instead of your real board, so browser verification cannot click another task's "Branch Merged" dialog or reach another task's live terminaldev3 task open [<id>]brings the app to the front on a task — the CLI twin of adev3://task/<id>link, but it needs no registered URL scheme, so it works on every platform- New
dev3 artifact-templatecommand copies this task's pristine dev3 artifact starter into./dev3-artifact-reportand prints where it went - The shared image viewer (
dev3 show-image) now has a Download button in its header, and right-clicking the image opens an in-app menu with Save image / Copy image path - Selecting text in a Markdown preview inside Show Diff now raises an "Add comment" button, so a rendered document can be reviewed without switching back to the source diff — the comment lands on the same source lines and in the same review export as a gutter comment
- The dev3 CLI can now be pointed at a specific running instance instead of whichever one discovery prefers:
--instance self | primary | task:<id> | seq:<N>on any command, orDEV3_CLI_SOCKET=<endpoint>for a whole shell, and Settings → Install dev3 CLI additionally arms~/.dev3.0/bin/dev3-self, which always talks to the instance that installed it
Fixes
- The Launch task dialog now offers "+ Add variant" on Operations (non-git) boards instead of silently leaving the slot empty
- Reopening a finished task is usually about what the agent shared, so the archived task modal now leads with it: artifacts first as real cards, images as a thumbnail grid instead of a list of filenames, both above the description rather than buried between it and the notes
- Opening a task's diff is now a real navigation step: Back returns to the task you opened it from and Forward returns to the diff, instead of Back jumping straight out to the board
- Push detects when the branch has diverged from origin, renames itself to "Force push", and runs
git push --force-with-lease=<branch>:<sha>against a freshly fetched sha instead of failing with an unexplained non-fast-forward; Merge now pushes the base branch to origin behind a confirmation that names the review and CI bypass, so work is not left half-landed in the local clone - Press the ? button on a task and help mode finally outlines the task's own two toolbars and the terminal itself, instead of only the app header and the sidebar — the terminal card explains that it is a real tmux session in this task's own worktree, what the bar along the bottom means, and that the agent keeps running when you close the window
- A translation key that resolves in no locale now renders as ⟦kanban.someKey⟧ instead of the bare key text, so a hole in the translations reads as a hole rather than as copy
- The git bar's Merge button merges the branch's open pull request through
ghinstead of squashing into the local base branch and pushing it, so review, branch protection and CI still gate the landing; the button reads "Merge PR" and names the PR in its confirmation - Merging a task now takes its commit subject from the branch's own commits — reused verbatim when the branch has a single commit — or from the task title, instead of the first 80 characters of the task description with a trailing ellipsis
- Rebase now runs against the base the branch dropdown promises
- The header project switcher menu grew from 18rem to 24rem, because a row carries the space indent, an active-task count and a ⌘N badge beside the project name — real project names were being cut off
- The dev-server control on a kanban task card no longer shows an inert "dev off" pill when no server is running — it appears only while the server is starting, running, or its assigned port is squatted by another process
- Dragging across the Kanban board no longer smears a text selection over task titles and column headers — the board and the mobile column carousel are now non-selectable, like the controls they are
- A project added from a local folder with no git remote no longer compares against
origin/main, a ref that is not there - The Active Tasks sidebar scope switcher (project / space / global) marked its selection only by a faint text-color shift and an outline-to-filled glyph swap, which was practically invisible at 20px
dev3 dev-server start --wait/restart --waitnow waits for a port the task was actually assigned (DEV3_PORT*) instead of the first port anything in the dev-server process tree opens, so a curl right after the wait no longer races a dev server whose bundler socket or sidecar came up first- The light theme's yellow read as dark brown and was hard to spot, because sRGB cannot make a colour that is both dark enough to carry text on white and still yellow
- Fixed macOS x64 builds failing Apple notarization since the model-catalog proxy landed: the vendored bifrost binary for Intel declared an SDK of 10.4 and Apple rejects anything below 10.9, which failed the whole app archive
- A native-backend task whose terminal host process was killed used to sit on "Connecting..." forever, with no timeout and no way out
- The "N behind" half of the task git row is now red instead of muted grey — number and wording together, because being behind the base branch is a warning that a rebase is needed
- Terminal file-path links now survive a path that wraps onto the next row — a real soft wrap, a vertically split tmux window where the terminal never sees a wrap at all, and an agent CLI that reflows its own output into indented continuation rows
- Redrawing a full terminal screen used to re-read and re-parse the entire screen once for every row on it, so a 46-row repaint did that work 46 times over
v1.46.0
GitHub ReleaseFeatures
- When a project's setup script fails, the task pane now offers to start the agent anyway instead of leaving you with a bare shell
- The task's Branch menu now offers "Copy PR link" alongside the branch name, worktree path and checkout command, shown only when the task actually has a pull request
Fixes
dev3 dev-server start --waitnow succeeds for projects whose dev server runs in a container: a port that starts listening after the dev server launched counts as ready even when the listening socket belongs to the container runtime's daemon instead of the dev pane's process tree- Fixed the Kanban board rendering only a single task after entering a project whose task list was fetched while a task update arrived
- Switching tasks no longer blanks the diff summary and ahead/behind counts into a spinner: the last known numbers for that task and compare ref are kept and replaced in place once the refresh lands
- The board's label filter row no longer stops after a fixed ten chips: it measures the free width and shows as many labels as actually fit, pushing the "+N more" button to the right end of the row and re-fitting on every resize
- Task cards no longer carry the hover-only "+ Add label" button in mobile view, where it was invisible but still tappable right next to the label chips
- The pane and window switcher bars above the terminal on a phone were noticeably smaller than the task summary bar right above them
- On a phone the priority chip in the task summary bar was a tiny badge next to the tall status control; it now matches the status control's height, so the two read as one band and the chip is a comfortable touch target
- Menus and dropdowns in dev3 HTML artifacts no longer get cut off by the card, scroller, or sticky table header around them: the artifact starter now opens every overlay in the browser top layer and places it against its trigger, flipping above when the viewport is short
- The worktree-config gear and the "I decide" completion toggle in the task info panel now carry the same bordered box as the buttons around them, instead of sitting flat in the bar
- Linux release builds no longer crawl or stall on Ubuntu's Azure package mirror: amd64 now installs its GTK/WebKit dependencies from archive.ubuntu.com directly, which cut apt from 2m31s+15m27s down to 4s+9s on a degraded day, and every apt call is bounded by a timeout and retried so a bad mirror fails loudly instead of holding the canary publish queue for an hour
- An agent pointed at a custom executable — a wrapper script, a shell alias, a renamed build of Claude Code — is now handled as the CLI it actually is, so Resume Session continues the conversation instead of restarting from the task description
- Fixed the fixture race behind the cli-socket flake: a vitest test that fails by timeout keeps executing, and every test in socket-client.test.ts shared one unix socket path, so the zombie could rebind it under its successor and kill it with a real assertion failure
- The header kebab's "Memory left" and "tmux Sessions" rows open their panels on hover again, and the panel now appears beside the menu instead of over it, so the pointer can keep moving down the list
- A terminal pane no longer breaks — blank canvas, output frozen until restart — after the app has been in the background for a while
- The status control in the task info panel now reads as a single boxed control: it carries the same bordered box as the buttons around it, and the green "complete" check sits inside that box as a full-height right segment behind a hairline divider instead of floating loose next to the chip
- Terminal text is drawn from a glyph cache now instead of being re-shaped character by character on every frame, which is what WebKit was charging most of the frame for
- A cross-task agent message sent from a task variant now carries the sender's task id as the reply address instead of
seq:<N>, which every variant of a group shares and which the CLI rejects as ambiguous
Refactors
- The with/without-tests toggle is no longer a chip of its own: in both the task summary bar and the diff toolbar it is now a nested icon segment inside the changed-files readout, boxed like the quick-complete segment of the status control, showing a struck-through flask while tests are excluded
- The header bar keeps only what you act on: the tmux session list, Quick Shell and the No Sleep toggle moved into the "More" menu, and the memory readout now appears in the bar only when the OS reports pressure (yellow or red) — otherwise it sits in that menu as a row
v1.45.2
GitHub ReleaseFeatures
- dev3 now ships a
dev3-share-artifactskill to every agent: ask for a link to a report and the agent folds the multi-file artifact into one self-contained HTML file, publishes it as a secret GitHub gist, and verifies the preview URL before handing it over - Render Mermaid code fences as theme-aware diagrams across Markdown previews and PR conversations, keeping wide sequences readable with horizontal scrolling and preserving source for invalid diagrams
Fixes
- The terminal now keeps painting through a frame that crashes instead of going blank for good, and a pane that stopped painting with no error at all is detected and rebuilt
- A terminal pane that went permanently blank — ghostty-web's render loop stops for good after a single throw inside a resize, so neither a window resize nor a fullscreen toggle brought it back — now rebuilds itself and reattaches to the still-running session
- A window left hanging off every screen after a monitor resolution change (or a wake) is now pulled back onto a display, instead of only being clamped on the next app start
Refactors
- The pane toolbar in the task inspector now hides the layout, zoom and close-pane buttons until the task actually has a second pane, leaving only split, new window and the shortcuts cheat sheet on a single-pane terminal
- The active-tasks sidebar scope switcher is now project/global: the attention scope (bell button with the pulsing count) was removed in favor of the upcoming Spaces scope
- Task storage no longer carries a per-file diff breakdown that nothing read, keeps each task's title/overview history in a per-task sidecar file, and writes tasks.json without indentation — a large board's store drops by up to 68%, so it loads and saves faster
v1.45.1
GitHub ReleaseFeatures
- A task whose agent session did not survive a force quit or a machine restart now renders like a hibernated one — greyed out, sorted below every live task, and carrying a DISCONNECTED badge on the Kanban card, the Active Tasks sidebar row and the dashboard row
- A build-time
VITE_TELEMETRYflag can turn every analytics channel off
Fixes
- Fixed the app hanging forever on the "Checking system…" startup screen, where Reload and Retry both re-armed the freeze
- A gitignored
.npmrcat the project root is now cloned into every new task worktree, so installs there use the same registry and credentials as the main checkout instead of silently falling back to the public registry - A task update that changes nothing no longer rewrites the project's tasks.json, and the Codex pane-session hook answers its steady-state no-op from cache instead of taking the file lock
v1.45.0
GitHub ReleaseFeatures
- Keyboard shortcuts now work properly in browser remote mode
- Tagged releases now carry a Windows build:
stable-win-x64-dev-3.0.zip(121 MB, ~400 MB extracted), the exact tree CI extracted and launched on a Windows runner, attached next to the macOS disk images - The dev3 artifact starter now grows with the viewport up to 1840px instead of parking a fixed 1180px column on a wide monitor, and every table reads like a data grid: alternating row tint, a full-row hover highlight, vertical rules between cells, tabular figures, a header that stays pinned while the rows scroll, and a caret showing the sorted column and direction
- Agents can now put a long command in a neighbouring pane and read what it printed on any terminal backend and any OS:
dev3 pane listnames the backend and which pane is yours,dev3 pane run "<command>"opens a pane and mirrors its output into a run log,dev3 pane logs <run-id>returns the outcome (still running, or the exit code) plus a bounded tail, anddev3 pane close <run-id>closes it - Task notes no longer bury the task details: the panel now shows the newest three notes with a count, each long agent note folded to six lines behind a Show more toggle, and a Show all row that opens the whole note log in its own sheet on phones or dialog on desktop
- dev3 now creates its own Desktop and Start Menu shortcuts on Windows at startup, and repairs them when an update moves the app, so the app can be launched after a reboot without hunting through AppData
- Canary builds are now downloadable from the GitHub releases page: one rolling pre-release tagged
canary, refreshed on every publish, carrying the macOS DMGs, the Linux tarballs, the CLI tarballs and the launched Windows zip - The folder picker now creates a new folder inside the folder you highlighted, and says which one on the button and in the name field, instead of always creating in the folder the tree is rooted at
- When one task's agent sends
dev3 messageto another task, a violet toast now names both sides —#7 Coordinator → #42 Receiver— with a preview of the text, and clicking it opens the receiving task where the message landed - Windows (win-x64) now publishes to the canary update channel: the update manifest plus a downloadable .zip of the exact app tree CI launched and shut down cleanly, so a Windows user can install dev-3.0 for the first time instead of digging a build out of a workflow run
Fixes
- Fixed launching Codex on Windows, where every session died with
expected struct HooksTomlbefore it began: the status hooks dev3 passes to Codex used to travel as a quoted-c hooks={...}argument, and the Windows command line ate their quotes - dev3 no longer leaves dead trust entries behind in Claude Code's
~/.claude.json - dev3 added a
[projects."<worktree>"] trust_level = "trusted"block to~/.codex/config.tomlon every task launch and never removed one, so the file grew by one dead block per task forever — 464 blocks in 63 KB on the machine that reported it - dev3 registered every task worktree in ~/.gemini/trustedFolders.json and never removed it, so the file grew one dead entry per task forever
- Fixed editing an agent's base command having no effect on new sessions: the auto-cached resolved binary path kept pointing at the previous binary and silently overrode the edited command at every launch
- Adding a second agent to a task on Windows failed with "requested shell executable not found: /bin/bash" — the pane spawn path hardcoded a POSIX shell
- The Dev Server button and
dev3 dev-server startno longer refuse on Windows with "the dev-server pane requires the tmux backend, which is POSIX-only": that refusal belonged to the nested tmux session the tmux backend hosts the server in, not to the pane, and a Windows task is always native - The Rebase, Push and Merge buttons opened a pane that ran a hand-written bash script through /bin/bash, so on Windows they did nothing at all
- The packaged Windows CI job now executes a real
dev3 pane runand reads its log back — that path had never been run on Windows at all, only asserted about from macOS - Task metadata writes no longer fail on transient filesystem hiccups: each atomic write now uses its own temp file (two concurrent writes inside one process used to collide and fail with ENOENT), retries a transient rename a few times, and a timed-out file-lock acquisition is retried with a short deadline instead of failing the whole operation
- Agent-initiated approval dialogs (a task asking to complete, or to start another task) are shown on every connected client — each open window plus every remote browser
- Fixed the Codex config.toml dev3 writes on Windows: native paths were interpolated raw into TOML basic strings, so
C:\Usersread as the escape\Uand codex refused to start anywhere on the machine with a parse error - On Windows and Linux the "Link pull requests back to the task" setting is now off and disabled, with a line explaining why: neither registers a handler for dev3:// links, so the deep link dev3 appended to a public pull request went nowhere when clicked
- Opening a task in remote mode no longer shows the previous task's terminal output: a fresh ghostty terminal inherited the screen the previous one held, and over a tunnel that leftover stayed on display for as long as the redraw took
dev3 task list(anddev3 tasks list) now groups by column before paging: live work (in-progress, questions, every review column, custom columns) first, then To Do, then completed, then cancelled — newest first inside each group- Fixed the win-x64 canary publish, which failed on its first ever run: the release script built an absolute module path under Git Bash (
/d/a/...) and handed it to bun, which on Windows resolves onlyD:\a\... - From now on a broken Windows build blocks the entire release, including the macOS disk images: the win-x64 leg is no longer best-effort,
release-build-windows.ymllost itsbestEffortinput andcontinue-on-erroraltogether, and the release job's "Warn when the Windows build is missing" step is deleted because a missing Windows zip can no longer happen - The Windows self-update could hang forever on a black console: the handover script waited on process image names, so a single leftover launcher.exe — or any unrelated Bun process on the machine — blocked it with no output at all
v1.44.0
GitHub ReleaseFeatures
- Settings → Agents is a two-pane preset library instead of nested accordions: a filterable list grouped by model on the left (the same Model → Mode labels the launch picker shows), one preset editor on the right, with duplicate, favorite/unfavorite, make-default and a confirmation before delete
- On mobile, holding the Backspace or arrow keys in the terminal key bar now repeats them after a short delay, like a physical keyboard, instead of requiring one tap per character
- The deep link dev3 appends to pull requests is now a setting (Settings → Tasks, on by default), so a public PR need not advertise which tool opened it, and the footer itself says where to switch it off
- Pull requests dev3 opens now end with a deep link back to the originating task, so anyone reading the PR can jump straight into the app
- Settings → Tasks & Board now has a Task sort order preference that governs the order of tasks inside a priority band, on the Kanban board and in the Active Tasks sidebar alike: Oldest first (default) floats the task whose status changed longest ago, Newest first puts the most recently active one on top
Fixes
- Fixed the mobile bottom sheets (task actions, status, move to, PR status, pane map) rendering taller than the screen inside a task, which pushed their header — grabber, title and close button — above the top edge and left no backdrop to tap, so the only way out was picking an action
- The Create-PR prompt no longer carries a multi-line markdown block, so it cannot submit early on agents that read a newline as Enter; the footer travels as one line and the divider is described in words
- The task-complete sound played on every UI-driven completion after a restart even when the setting was off, because the app never read global settings at boot — it held hardcoded defaults until the Settings screen was opened
- The dev3 artifact starter no longer stacks panels flush against each other:
main.appspaces its children, and a bare.cardcarries its own padding, so a report looks right whatever order panels are written in - Fixed locally built dev-channel apps opening a permanently black window on macOS 26: the dev-only DevTools auto-open at dom-ready hit a known Electrobun bug (blackboardsh/electrobun#357) where the docked Web Inspector blanks WKWebView content rendering while the renderer keeps running
- A task started on a remote or fork ref — a pull request you opened for review — no longer runs that branch's committed
.dev3setup, dev and cleanup scripts, no longer exports its env vars into your sessions, and no longer gets pre-granted agent trust or.mcp.jsonapproval; the project's own config is used instead - Remote Access no longer flashes a scannable LAN QR code while the Cloudflare tunnel is still starting: with "Accessible from anywhere" on, the QR, the URL and Copy URL are replaced by a loader until the public hostname lands
- When a project has a setup script, its log pane now opens below the agent pane instead of above it, so the agent keeps the top slot it occupies on tasks without a setup script
v1.43.0
GitHub ReleaseFeatures
- The terminal over remote access no longer holds a keystroke echo for a full frame before sending it, and it now throttles its send cadence instead of piling frames into a socket the tunnel cannot drain — so sustained output stops rendering smoothly but behind reality
- The prompt the Review toggle injects into a new task's description is now editable in Settings → Tasks & Board and, per project, in Project Settings → Project Config
dev3 messagenow accepts up to 80 000 characters instead of 10 000, and a body too large to type into a terminal is written to a file automatically — the agent receives that path inside the usual envelope instead of acommand too longfailure
Fixes
- Project Settings saves no longer get silently reverted when a .dev3 config file already owns the field — the value is written back into that file instead of projects.json, and the Project tab now shows the config that will actually run
- The Markdown preview and rich diff in the diff viewer now render images the document references from the repo (
) instead of showing a broken box — the file is read off disk and inlined - Throwing a single remark at the agent from the diff cost three clicks — add the comment, send it, delete it — so the comment composer now has a Send now button that ships it immediately and keeps it out of the review
- The dev3 agent protocol now states that the managed worktree is the isolation boundary, so agents no longer create a nested git worktree, clone, or side checkout when an unrelated skill or workflow asks for one
- Pressing "Send to agent" on a diff review could erase the whole review while the agent received nothing — the send reported success as soon as the keystrokes left dev3, which is not the same as the agent reading them
- The terminal cursor no longer blinks while your input goes somewhere else — it disappears when focus moves to the artifact panel, another pane, or another app, and comes back the moment the terminal is focused again
- Images an agent shares with
dev3 show-imageare no longer capped at 50 per task — the 51st image used to silently drop and delete the oldest one - Block, box-drawing and powerline glyphs in the web terminal are now painted on the same cell box as the cell background, so powerline caps sit flush against the segment they join instead of 2px above it, and bars drawn out of block characters come out solid instead of striped with 1px seams
- A canary build and the stable release of the same version were indistinguishable: the published canary manifest carried a bare version, so the update popover offered "v1.42.3 ready to install" with "what's new in v1.42.3" for a build off main
v1.42.3
GitHub ReleaseFeatures
- Settings → System can now switch you to the Canary update channel, which publishes from main roughly hourly instead of only when a release is tagged
Fixes
- Fixed the load-dependent flake in the cli-socket label.delete and note race suites
- Completing, cancelling, deleting or hibernating a task now kills every process still running inside its worktree, not just the terminal tree and the dev server — detached agent daemons, headless browsers, watchers and leftover dev builds used to survive teardown and keep burning CPU and memory for weeks
- The second update channel is now called Canary instead of Unstable — the old name could never actually be built, because the build tool only accepts channel names from its own list and quietly produced a development build for anything else
v1.42.2
GitHub ReleaseFeatures
- Clicking a completed or cancelled task now lists every screenshot and HTML report the agent shared for it, each as its own link that opens the viewer at that item — no need to restart the task to see its own output
Fixes
- The update-channel picker went out live in 1.42.1, but nothing is published on the second channel yet — choosing it left the app showing a bare HTTP 403 instead of an update
- The native task-terminal E2E no longer assumes that a resize acknowledgement means the session record is already on disk — the host persists it fire-and-forget after answering, so the record lagged and the Windows release gate failed intermittently
v1.42.1
GitHub ReleaseFeatures
- When a Claude turn dies on an API error — a hit usage limit, an expired login, a billing block — the task now moves itself to Has Questions with a red attention badge and a desktop notification naming the reset time, instead of sitting in Agent is Working for hours
dev3 doctor --worktreesreports what~/.dev3.0/worktreeskeeps on disk per project and how much of it is reclaimable: orphaned directories whose task record no longer exists, worktrees whose teardown never finished, and old diffs/logs of long-finished tasks- Settings → System now lets you pick which builds you get
- The Active Tasks sidebar row now carries the same lifecycle rail as the Kanban card: a status ring that opens the Move-to menu, the attention bell, and one-click complete, with the upright status word appearing only on rows tall enough to hold it whole
- Every toast now carries a source line saying where it came from: the task number, project and title for task work, the project name for project-level messages, or the app area (Settings, Update, Dashboard, Terminal, Menu) for everything else — and clicking a task or project toast takes you there
- The artifact viewer header now has an external-link button that opens the artifact in your web browser, next to the download button
- CI already built the real Windows app, launched it and proved it reached a window — then discarded it, so nobody could obtain the thing we prove works
Fixes
- Gave each test in the
label.deleteandnote.add/note.deleterace suites its own project, so a handler suspended on purpose by one test can no longer land its write in the next test's tasks.json - Fixed the phone UI being sized for a mouse: the global touch-target rule forced every button to 44×44 (inflating carousel dots, label chips and priority badges) and its
:is()selector silently overrode each component's own size - The Kanban loading placeholder now matches the phone layout it precedes: below 768px it shows a single full-width column under a pager row instead of five squeezed vertical rails, so the board reads as loading rather than as an empty grid
- The phone used one scale everywhere, tuned for working inside a task, which left the Kanban board and the dashboard reading as a thumbnail of a desktop board
- On narrow viewports the global header's memory-headroom readout no longer sits inline next to the breadcrumb — it folds into the kebab bottom sheet alongside prevent-sleep, rate limits, git pull and tmux sessions, and still opens its full breakdown there
- A release published the update manifest before the file it points at, so an app that happened to check for updates during those few seconds was offered a download that did not exist yet
- The Active Tasks sidebar showed its upright status word only on rows tall enough for it, but the word itself propped up the row: once a task had been focused with an overview, its row kept both the word and the extra height after focus moved away
- The dev-3.0 window on Windows now shows the app icon in its title bar and in the taskbar instead of the generic system default
- On a phone the Images and Artifacts rows in the task actions sheet just closed the sheet without opening anything — the event they fired was missing the project id the viewer needs
- The native-session registry's Windows lifecycle proof reported journal isolation as one boolean over two unrelated properties, so a red run could name neither: a session's own output is now awaited to a ceiling instead of a fixed 400 ms sleep, cross-session leakage is re-checked on every observation so waiting can never hide it, and a failure names the cause, the fix and the journal contents it saw
- Pulling a task back out of Completed no longer greets you with "the branch is already merged — complete the task?" seconds later
- A task's ahead/behind counts, diff chip, PR badge and Rebase (AI) target could stay pinned to an already-merged review branch after the task's own branch was renamed, so every number described someone else's branch
- The memory notice in the launch dialogs no longer quotes megabytes; it now says in one short line that the machine is loaded and that another task will be a squeeze, taking half the vertical space it used to
- "+ Agent" now leaves the keyboard in the pane it just opened, so the first thing you type is the new agent's prompt instead of being swallowed by the button that opened the dialog
- Underlines on file paths in terminal output no longer blink while an agent is working: the overlay now repaints on the next animation frame instead of clearing itself and waiting out a debounce that never expired under continuous output
- Pasting an image now takes the picture from the paste event itself instead of re-reading the host clipboard, which on Windows returned raw bitmap bytes that were saved as a broken
.png; the host-clipboard fallback converts those bytes to real PNG bun run devon Windows failed before it could start, because Electrobun wipes its build folder with an un-retried delete and Windows refuses to remove a folder a running process sits in- Windows executables shipped with the blank default icon because electrobun's bundled CLI cannot resolve its own
rceditdependency and swallowed the failure as a warning - A single 60s stall of the Windows launch proof's PowerShell process query withheld the downloadable Windows build from a launch that had actually succeeded (run 31098005022 attempt 1)
- The packaged Windows proof no longer makes pull requests wait — that cost about four and three quarter minutes on every in-scope PR
v1.42.0
GitHub ReleaseFeatures
- Settings has a new Keyboard category listing every app-level shortcut: click the keys shown on a row and type the combo you want, and if another shortcut already owns it you are told whose before you take it
- An agent working in one task can now ask you to start another one:
dev3 task move --task seq:<N> --status in-progresson a task that is not its own opens an approval dialog with the usual Provider/Model/Mode picker, so you choose which agent runs it and can decline outright, whiledev3 task create --scratch --rundoes the same for a fresh throwaway peer that starts with no prompt - Rebuilt the Kanban task card around five zones: a 3px status strip on the top edge, a full-width identity header that finally fits the agent and config string, a vertical lifecycle rail on the left that is the status control (pipeline ring, short upright column name, attention count, quick-complete), and a segmented bottom bar where read-only signals are grouped git / run / time above a reserved action strip
- Native task terminals now show a grab handle on every boundary between panes, so a split can be resized by dragging it instead of guessing at an invisible edge
- The global header now shows how many gigabytes of memory are still free, with a level bar under the number that fills as the machine fills and takes its colour from the operating system's own memory-pressure signal rather than from a threshold of our own
- Tasks can now be hibernated from the open task's session bar: the agent, its tmux session and the dev server are stopped and their ports released, while the worktree, branch, uncommitted changes, notes and PR state stay untouched
- File paths mentioned in terminal output (absolute, ~-relative, or worktree-relative, even when soft-wrapped across lines) are now rendered as underlined links and are Cmd/Ctrl+Clickable — only paths that actually exist on disk, inside your home directory or a registered project, become links
- Project Settings → Board now has a "Sensitive project" toggle
- New read-only
dev3 peekcommand: a coordinating agent can glance at another task's terminal — a per-pane summary with liveness and how long ago each pane produced output, plus the tail of one pane — without focusing it, sending input, or interrupting the worker - Terminal panes can now reorder right-to-left text (Hebrew, Arabic, Persian) so it reads correctly instead of appearing reversed, via a new Advanced Experience group in Settings → System that hosts beta behaviour and ships off by default
- Every task row on the projects dashboard now ends in a green ✓ that completes the task without opening its board — hover-revealed on desktop, always visible and touch-sized on mobile
- Native terminal hosts now name themselves after the task that owns them, so a system process viewer shows
dev3-terminal-host seq:1383 pane:1instead of a wall of identical rows — visible inps, inps aux, and in the Windows Task Manager command-line column - A Scratch task now launches into Has Questions instead of In Progress — it has no prompt, so nothing is happening until you type, and the board says so
- Added a custom
dev3://URL scheme (macOS) so links can open the app directly:dev3://task/<id>jumps to a task,dev3://project/<id>opens a board, anddev3://new-task?project=<id>&text=<…>opens the Create Task modal prefilled with text - Sending an inline diff review to the agent now clears the comments automatically, so "Reset review" and its confirmation are no longer part of every review cycle
- Sending a large review to the agent no longer fails on the message-length guard: payloads over 8 000 characters are written to a file next to the task worktree and the agent is sent that path with a one-line instruction to read it
- Every inline comment in the diff review now has its own "Send to agent" button, so a comment can go to the agent the moment it is written instead of waiting for the whole review
- Productivity Stats now includes a model-configuration breakdown alongside the agent distribution, showing how often each launch preset shipped work
- Project Settings now has an Environment Variables editor, also configurable in .dev3/config.json and .dev3/config.local.json with per-key merging
- Added the ask-dev3 agent skill — a router over dev3's features and workflows, auto-installed into every supported agent's skill directory
- Global Settings → Terminal now has a machine-local "Terminal backend for new tasks" picker, stored in its own versioned file (
~/.dev3.0/terminal-backend.json) so an older side-by-side install cannot silently drop it: keep tmux (today's default) or opt new tasks into the experimental native terminal - The task terminal's split, focus, resize, zoom, close and layout controls now work on tasks running the native (non-tmux) terminal backend: each visible pane is a real terminal with its own shell, and the layout survives an app restart or a browser reconnect
- Tasks whose terminal runs on the native backend now carry a small terminal glyph beside their title on the Kanban card, the Active Tasks sidebar and the task breadcrumb, with a hover tooltip and an accessible label
- The terminal-backend seam gained
captureView, one read-only way to read a named pane's recent text on both the tmux and native backends without focusing it, typing into it, resizing it, or depending on the pane's agent
Fixes
- Handing a task off to its agent — Create PR, Commit, the rebase-conflict prompt,
dev3 messageand scheduled messages — now reports three answers instead of two: delivered, not delivered, or sent-but-unconfirmed - The Create PR and PR + auto-merge buttons used to hand the request to the agent in total silence, so a failed handoff looked exactly like a successful one
- Dim text in Claude Code and Codex — input placeholders, hints, select-prompt descriptions — rendered at full brightness instead of gray
- Launching bug hunters on a tmux task now waits for each hunt prompt to actually reach its pane instead of firing it blind
- The completion and cancellation chime now fires as the first thing a terminal move does, instead of after the terminal session, cleanup script and worktree were torn down — so it no longer arrives seconds late, and it is no longer lost when teardown fails
- The Windows desktop launch waited only 45 seconds for its renderer, which measurement showed was barely longer than the slowest healthy packaged startup — so a slow or loaded machine could be told it had no UI when it simply had not painted yet
- Task teardown no longer hangs forever when the cleanup script's tmux client refuses to exit: an orphaned client is detected and killed within seconds, a genuinely long script gives up at a 10-minute cap, and worktree removal plus the final status write always run
- Icon glyphs written as
text-basewere being painted in the page background colour, because thebasedesign token also emitted atext-basecolour utility that collided with Tailwind's font-size class — 107 of them were invisible on the Dashboard alone - The task card's agent-config string keeps its ellipsis but now reveals the full value in the app's own tooltip instead of the slow, unstyled native one — and only when the text is actually clipped
- The task card's vertical status rail shrank from 38px to 20px on the desktop board, giving the title and labels the space back
- The UI freeze after Stop Dev Server on a native task remains unconfirmed, and nothing here changes how the dev server behaves
- Take control in a native terminal now actually transfers the writer lease when another dev3 window or instance holds it, instead of coming back refused and leaving the viewer permanently read-only
- The hourly task-store backup now checks with a stat() whether this hour is already snapshotted, instead of reading both the board and the existing backup in full before every save
- The keyboard focus ring was invisible on 27 controls: Tailwind's focus variant of outline-none out-specifies the app's global :focus-visible rule and painted a transparent outline over it
- Moving a task to AI Review did nothing on a task using the native terminal backend: the review agent was launched with a raw tmux split, which cannot work without a tmux session, and the failure bounced the card back to Your Review in complete silence
- The launch picker's account popover now shows each account's 5h/7d usage bars, percentages and reset countdowns inline, so comparing accounts no longer costs a click per row
- The native-terminal-backend marker is now a bolt in a rounded frame, and in the Active Tasks sidebar it moved up into the badge row between the priority and the agent badge instead of sitting in front of the title
- Improve the Accounts settings tab: account rows now use proper radio-group semantics with arrow-key navigation and account-specific accessible names for the Remove/Rename/Edit-API actions; the slot grids collapse on narrow widths; and several action buttons gain the app's standard press-scale feedback
- The dev3 tmux server now runs exclusively on the bundled config and no longer sources
/etc/tmux.conf,~/.tmux.confor~/.config/tmux/tmux.conf - On a task using the native terminal backend, starting the dev server or running Rebase opens a real visible pane in the task's own terminal instead of failing invisibly — the dev server used to run hidden in a tmux session a native task should never touch, and the git panes errored out
- Launching bug hunters on a native task failed with a tmux socket error, because the launch path always split a tmux pane
dev3 message, scheduled "Send later" messages, and the Create-PR / commit / rebase-conflict hand-offs now reach agents running on the native terminal backend instead of always failing with "the task has no live agent session"- The "+ Agent" action now opens its pane through the shared backend-neutral pane seam, so a task running the native terminal gets a real extra agent pane instead of a failed tmux split
- Splitting a pane or picking a layout on a native-backend task no longer looks frozen for a couple of seconds: the toolbar and the terminal canvas now share one pane state, so the server's answer repaints the panes immediately instead of waiting for the next poll, and the clicked control greys out for the moment the action runs
- Closing a pane on the native terminal backend took about 1.7 seconds: the host asked the shell to stop with SIGTERM, which an interactive shell on a PTY ignores, so every close waited out the full grace window and then force-killed
- A task running on the native terminal backend showed "no terminal session — Unknown session" for its first pane in any window other than the one that launched it, while its other panes rendered live output
- Reading a native task's pane state verified every pane's ownership twice — once while recovering the pane set from disk, once again while listing the panes — so a six-pane read forked 24
psprocesses where 12 answer the question - Raise the launch picker’s portalled favorites menu above modal surfaces so account and preset selection stays visible and usable
- Reworked the Dashboard after a full interface review: the background-work line now reads "2 agents working" instead of "3 agent is working", removing a project explains that nothing on disk is deleted, truncated project names, paths and task titles are selectable and reachable via tooltip, and the drag handle is no longer a dead tab stop
- The Hibernate control in the open task's session bar now wears its amber skull glyph instead of a grey outline, so a rare and costly action stops the eye before the tooltip explains it, and hibernating asks for confirmation first — spelling out that the worktree and your changes survive while the terminal scrollback does not, with an extra warning when the task is running several agents at once
- Resuming a task no longer dies with "No conversation found with session ID" when the stored agent session id has no transcript on disk
- The dialogs that pick which agent, model and account to launch are now fully keyboard-operable: the Provider/Model/Mode dropdowns, the favorites menu and the account switcher are reachable by Tab and driven by arrow keys, and Escape closes the open dropdown instead of throwing away the whole launch configuration
- The Active Tasks sidebar got a detail pass: the scope toggles now cross-fade between outline and filled glyphs so the active scope reads as more than a colour change, every icon button has press feedback, the attention counter no longer crowds the panel-toggle icon, the bell badge uses the danger design token instead of a raw palette colour, and the pulsing bell plus the busy card rail honour "reduce motion"
- The Productivity Stats hero gauges now use three columns on wide screens, keeping the six speedometers in two rows so their bezels and cards no longer overlap
- The blue "agent turned off/on completion prompts" toast now shows the same task context line as other notifications (
#seq · project · task title), so it is clear which task it came from - New projects with a single committer no longer default their diff comparison to the local base branch — when
origin/<base>exists it always wins, so freshly cloned repos compare againstorigin/maininstead of a localmainthat dev3 never fast-forwards - Running dev3 in remote or headless mode from an installed app could not start an experimental native terminal: the bundled CLI looked for the packaged host image next to itself instead of at the package root, so the task failed the availability check even though the image was there
Refactors
- Added one internal backend-neutral way to inject terminal input into a named task pane, ready for terminal workflows to build on
- Polished the Kanban board's interaction details: task cards now lift with the theme-aware card shadow token (a soft blue-grey in light mode instead of hard black), every board control gained 0.96 press feedback that respects reduced-motion, hover-revealed controls fade instead of popping, and the quick-complete check cross-fades into its spinner
- Rebuilt the dark and light colour tokens in OKLCH: the muted text ladder is now readable (dark tertiary/muted text went from APCA Lc 35/19 to 61/41), surface lightness ramps are monotonic so modals sit above cards and hovers never dip below the surface they lift from, dark borders got a visible step, and the four warm roles (warning, gold, awake, fire) are separated by hue instead of overlapping
- Project Settings got a craft pass: the 12-swatch colour palette on every label and custom column collapsed into a popover behind the colour dot, reorder arrows now appear on row hover (still always visible on touch), and the long config tabs are grouped into named sections with dividers instead of one flat wall of fields
v1.41.1
GitHub ReleaseFeatures
- HTML artifacts now have a find bar: press ⌘F (Ctrl+F on Linux) while the artifact viewer has focus, or click the new magnifier in its header, to search the rendered document with match counts and ↑/↓ stepping
- Artifacts can now bundle local CSS, classic JavaScript, CSS imports, and images while remaining portable through compressed ZIP export and isolated inside the opaque-origin viewer sandbox
- Inactive tmux panes now render on a darker background with greyed default text, while the focused pane keeps the full theme colors, so it is obvious which split you are typing into
- The New Task popup gained a fourth exit, "Save as draft": it parks an unfinished task in To Do with a dashed card and a Draft badge, and nothing can start it — not Run, not a drag, not a scheduled launch, not an automation, not an agent over the CLI
- Clicking the currently open task in Active Tasks now returns to its project's Kanban board, while clicks on other tasks still open the selected task
- New task images and HTML artifacts now highlight their toolbar buttons in green and animate their icons until the user opens the corresponding viewer
Fixes
- Artifact panel resizing now exits cleanly when pointer release is lost, the window loses focus, or the page is hidden, preventing the resize overlay from blocking the task UI
- The board no longer hides a review column that still holds cards: turning peer review off, or converting a board to Operations, used to take those tasks off the board entirely while they stayed in tasks.json and visible to the CLI, and a restart did not bring them back
- The experimental native terminal backend could not start from a packaged macOS or Linux build: the host bundle was only built on Windows and no package outside Windows carried a native host image
- On macOS the "Open in…" picker fired on Ctrl+O as well as ⌘O, and its capture-phase handler swallowed the keystroke before the focused terminal saw it — so Ctrl+O-bound features of the CLI running in the pane (Claude Code's transcript/expand toggle, for one) were unreachable
- Following the Ctrl+O fix, seven more app shortcuts claimed their Ctrl form on macOS and swallowed the keystroke before the focused terminal saw it — Ctrl+Q (unfreeze output), Ctrl+H (backspace), Ctrl+N/Ctrl+P (shell history), Ctrl+K (kill to end of line), Ctrl+G (abort input) and Ctrl+[ (escape)
- Task completion and cancellation sounds now play through the Web Audio API instead of an
<audio>element - PR review tasks created from fork branches now compare against the project base, restoring changed-file counts, line stats, branch diffs, and recent-commit diffs
v1.41.0
GitHub ReleaseFeatures
- The task inspector's git row now has a Commit button that hands the commit to the agent in the task terminal — it reviews the changes, stages them and writes the message, without pushing
- Markdown files in the diff viewer now open in rendered preview mode by default, and a modified file's preview highlights what changed: added blocks sit on a green wash, removed blocks on a red one, GitHub rich-diff style
- Remote (browser) mode no longer reads as frozen when the link drops: a floating pill names the connection state, doubles as an instant retry, and confirms "Back online" once recovered
- The task card's seven-dot pipeline is now a compact progress ring carrying the stage number, which frees roughly a third of the status row, and a ✓ next to it sends the task straight to Completed after a single in-app confirmation
- Show a compact green person-check badge on Kanban task cards when a pull request has a human approval, independently of mergeability
dev3 message --task seq:Nsent from inside another task's worktree now arrives wrapped in a<dev3-ai-message>envelope carrying the sender's seq, title and the exact reply command, so the receiving agent immediately knows the text came from another agent and where to answer- The Codex agent now supports Amazon Bedrock as an LLM backend, selectable per agent in Settings → Agents (same toggle Claude already has)
- A task terminal explicitly running on the native backend is now fully usable through
dev3 remotein a browser: a viewer that attaches mid-session rebuilds the screen from a bounded journal instead of starting blank, a reconnect resumes from its own watermark with no missing or duplicated output, and exactly one viewer types while the rest are read-only until they take control - On Windows the desktop app now publishes a loopback-only TCP endpoint record and the bundled dev3.exe CLI connects through it, so the existing CLI commands and the agent status hooks work there without a Unix socket
- The experimental native terminal parser now publishes read-only queue, persistence, and resync counters, caps snapshot writes at one per pane per second, skips writes whose screen is unchanged, and never keeps more than one write in flight
- Added a native multi-pane terminal session coordinator that composes one persistent PTY host per logical pane, with a shared split layout, client-local focus and zoom, writer-owned resize, and recovery of the same panes and processes after an app restart
- A task's primary terminal can now run on dev3's own native terminal host instead of tmux, when the task is explicitly opted in with
dev3 task terminal-backend --to native - Added a backend-neutral process/port ownership seam so a terminal session's CPU, memory, and listening ports can be accounted for on both tmux and native backends
- The dev3 desktop app now builds and starts on Windows without Git Bash, WSL or a system Bun: the build path no longer invokes any shell script, the packaged app ships its own
dev3.exe, andbun run dev/bun run startrun as a plain process chain instead of a POSIX shell line
Fixes
- Fixed a task launched on an existing or remote branch (for example a code-review task on
origin/<branch>) becoming impossible to start again after it was moved back to To Do: the leftover worktree directory madegit worktree addfail and the retry died with "a branch named X already exists" - Per-agent Claude config dirs now symlink every entry of
~/.claudeexcept the five that make an account an account (login, identity, usage, org policy, per-user flags), plus anything credential-shaped by name — sooutput-styles,workflows,routines,hooksand imported*.mdmemory files stop silently going missing - HTML artifacts now open with the currently selected dev3 light or dark theme in desktop and browser mode
- Dragging the artifact panel divider no longer relayouts the artifact iframe and refits the terminal on every pointer move
- Fixed inline diff comment editing so typing in the middle of existing text no longer moves the caret to the end after the first character
- Completing a task no longer fails with "Failed to remove worktree … is not a working tree"
- Clicking anywhere on a notification toast (shared image, shared artifact, agent notify) except its dismiss button opens the owning task and closes the toast — the swipe gesture no longer swallows the click
- The packaged native task-terminal E2E now matches the merged writer/observer contract: the second renderer attaches as a replayed observer whose input is refused, an explicit claim moves the writer lease atomically, and the promoted writer reaches the same shell while both viewers receive its output, with geometry following the writer and a reconnect resuming at its watermark
- Make the clickable project breadcrumb use the existing accent link colors so its navigation affordance is visually clear without adding an underline
- Clicking the header agent rate-limit usage indicator now opens Global Settings → Accounts instead of only dismissing its usage tooltip
- Squash and rebase merge detection no longer shells out to
bash -cfor itsgit patch-idpipelines — the two git processes are now streamed into each other directly, so tasks merged on Windows are detected instead of silently reported as unmerged - A tmux client/server version mismatch after an app update could block every new task and project terminal from starting until all tmux sessions were killed
- Scrolling fast through a long agent session no longer pastes fragments of mouse escape sequences (
<64;69;44M) into the input box - The Windows packaged-app launch proof now finds the real desktop launcher at
bin/launcher.exeinstead of scanning the bundle root, which found nothing and kept thewindows-app-archivejob permanently red - A Windows launch with no interactive desktop or a broken WebView2 runtime used to create a window whose webview never came up, and the first-paint resize nudge then segfaulted the app seconds later — or it kept running with no UI at all and could not even be shut down, because the quit gate waits for a renderer that never existed
- Completing, cancelling, aborting preparation, or deleting a task on the native terminal backend now waits until that task's terminal host, shell, and descendants are verified gone before the cleanup script runs and the worktree is removed
dev3 currentanddev3 task shownow reconcile the stored branch name with the branch actually checked out in the worktree, so agit branch -mis reflected immediately instead of waiting for the app's next branch-status poll- Make the task title in unsaved-changes confirmation dialogs clickable
- Keep the open HTML artifact workspace in sync when an agent shares a new artifact, selecting the newest item and refreshing the history counter even when the app window is not focused
- Fixed the flaky tests that kept blocking merges on unchanged code
- Fixed the flaky TaskDiffViewer test that failed on CI shard 5 whenever the runner stalled: component-boot waits now yield a bounded number of event-loop ticks instead of racing Testing Library's 1000ms wall-clock budget, so a slow machine can no longer fail a test whose DOM does settle
- Made the App test for the task-preparation-failure toast deterministic
- Kanban label filter chips now follow the label order configured in Project Settings instead of being reordered by task usage
- A branch that was squash-merged and then rebased (no commits of its own left) is no longer reported as "not fully merged" — dev3 now confirms it through the task's own merged pull request before offering completion, while brand-new branches with no work stay untouched
- The auto-updater no longer re-downloads and re-announces a version that is already downloaded and waiting for a restart
- Keep generated agent guidance for
dev3 notifyaligned with the CLI contract by documenting separate in-app duration and native desktop notification forms - The task inspector's two toolbars no longer overlap or clip on a narrow window: the bars now adapt to the panel's own width instead of the viewport's, so label chips stop painting over the tmux controls and the fullscreen, collapse, Dev Server, Ports and Artifacts controls stay inside the panel
dev3 label setnow resolves full task IDs, ID prefixes, and stableseq:Nselectors through the shared task resolver, while unknown selectors retain a clear error without mutating a task- Linked tasks now refresh sticky pull requests after GitHub auto-merge, even when the remote branch was deleted, and reuse the existing merge completion flow without repeating prompts
- Fixed a Windows-only flake in the native-session E2E suite: the probes that wait for a freshly started interactive shell allowed only ~4 seconds, so on a cold CI runner PowerShell answered just after they gave up and the lifecycle run failed
Refactors
- Added an internal, backend-neutral terminal-backend contract with two real adapters behind it — the existing tmux implementation and the merged native single-view lifecycle — so future work can target one product vocabulary instead of tmux specifics
v1.40.0
GitHub ReleaseFeatures
- Claude Opus 5 joins the built-in Claude presets on the 1M-context alias with Medium/High/X-High effort tiers for Auto and Bypass plus Default, Plan and Accept Edits, and Auto (Opus 5, Medium) is now the default configuration for new launches
- The dev3 artifact starter now renders charts with Apache ECharts (SRI-pinned cdnjs script, SVG renderer) behind a tiny theme-aware dev3Chart bridge, so agent-built reports get modern interactive charts — tooltips, legends, animations, any ECharts chart type — with a few lines of declarative code instead of hand-rolled SVG
- Added Streamer mode (Settings → Appearance, or the ⇧⌘P command palette) — a privacy toggle for screen recordings and screenshots that blurs identity-bearing values across the UI: agent account emails and names, organizations/workspaces, home-folder paths, tunnel URLs, the remote-access QR code, and GitHub logins
- Press ⌘O (macOS) or Ctrl+O (Linux) to pop up a searchable launcher of your installed apps (Finder, VS Code, Cursor, Ghostty, …, plus any custom apps you added)
- Markdown files in the Diff view now have a per-file Preview toggle that switches between the source diff and the rendered document (sanitized, themed, GitHub-flavored)
- Move a To Do task to a different project from its detail view — pick a destination from a searchable list and the task relocates to that board's To Do column, keeping its notes, history, overview, and priority
- The "Account for this launch" picker (Spawn Agent, Launch Variants, Bug Hunters, and the Settings default switcher) now embeds a mini quota card in every account row: one severity-colored bar per rate-limit window (5h / 7d / monthly credits) with its percent and reset countdown, an "∞ unlimited" chip for unlimited plans, a "no recent usage data" note for idle accounts, and the "captured X ago" freshness note
- Added a forward-compatible task relation model with typed
blocked-byandrelates-tolinks - The global header got ~125px slimmer: the prevent-sleep toggle is now icon-only with a new metaphor (grey sleeping z's when sleep is allowed, an awake orange eye while the machine is kept awake, plus a mini lock badge when remote access forces it on), the agent rate-limit pill dropped its hourglass icon and leads with the per-account usage bars, and the Remote Access button dropped its text label leaving just the QR icon
- Composed the merged native terminal primitives (session registry, attach client, versioned record, ownership, bounded parser-state snapshot) into one dev-internal single-view adapter and drove it through the existing backend-neutral parity corpus — every applicable single-view scenario passes against native while the tmux runner stays green
- Added an isolated deterministic SplitTree and debug-only fake-terminal lab to prove multi-pane layout, responsive navigation, stable pane identity, and cleanup behavior without changing production terminal handling
Fixes
- Completed task cards now wrap crowded status, PR, review, and comment badges within the card footer instead of letting them overlap in narrow columns
- The review diff panel now shows files on the right in the exact order of the left file tree (previously a flat path sort could diverge from the folder-grouped tree), and the file currently under the reading line is highlighted in the tree as you scroll the diff
- The native "Add Project" menu item now works: its openAddProjectModal push was missing a renderer handler, so the menu did nothing
- On phones the task status "Move to" control now opens as a bottom sheet with finger-sized rows (44px touch targets) instead of a tiny anchored dropdown, both on the task screen and on Kanban board cards; the status chip in the task summary bar is also larger
- Watched-task status-change notifications now fire in remote/browser mode on wide desktop viewports too, not only on narrow/mobile ones
- Completing a PR-review task (created from an existing branch) no longer prompts about uncommitted, unpushed, or unmerged changes — that branch is someone else's work, not yours
- Diagnostic logs now redact task prompts, URLs, credentials, environment values, and command arguments while retaining useful local failure details
- Fixed dev3's backend GitHub integration on machines authenticated only via a
GH_TOKENenvironment variable (e.g - Cancelling a task during preparation now waits up to 10 seconds for Git and setup processes to exit before best-effort cleanup, and startup safely removes abandoned
locked initializingworktrees without touching active task worktrees - The agent rate-limit panel now keeps every Claude/Codex account used in the last 7 days instead of dropping them after a day, and a managed account no longer overwrites another's data in the shared dump — so switching accounts stops making earlier ones vanish
- Remote Chrome notifications no longer reuse the task ID as a browser notification tag, preventing Chrome from replacing a notification across remote tabs and dropping its click-to-open handler
- Task completion and cancellation now report Git worktree removal failures instead of clearing the worktree path and branch, preserving teardown state for retry or manual cleanup
v1.39.1
GitHub ReleaseFeatures
- The artifact starter now demonstrates accessible SVG pie and radar charts alongside its area chart
- The diff review's Send to Agent now routes to the agent pane you last focused, tracked per tmux session, instead of whatever pane happens to be active — so with several agents it follows the one you were working in and no longer misfires into a focused shell or dev-server split
- Polished the Linux +
dev3 remoteexperience so dev3 runs cleanly on a fresh Linux box, fixing several issues hit while installing via Homebrew - The agent rate-limit indicator's hover panel is now a real quota dashboard: one card per Claude/Codex account with a usage bar per limit window (5h, 7d, monthly credits), reset countdowns, plan badges, and an "∞ unlimited" chip for unlimited-credit accounts
- Removed the per-task cap on retained HTML artifacts, so
dev3 show-artifactkeeps the full history instead of deleting the oldest entry after 20
Fixes
- In browser remote mode the Dev Server and Ports button tooltips now carry a yellow beta warning: both are tuned for local use and still experimental over the tunnel, so they may fail to start or misbehave — use at your own risk while we keep polishing them
- Tasks marked “I’ll complete it myself” no longer show a merge notification when their branch is detected as merged
- Fixed toast close-button handling after swipe support was added
- The auto-shown "update ready" toast now includes the same "what's new" feature list as the header dropdown; previously it showed only the version and restart button, so the changelog preview was easy to miss
v1.39.0
GitHub ReleaseFeatures
- The Changelog screen is now a release-notes timeline: prominent feature cards with headlines, compact rows for fixes and chores, a sticky date rail, full-text search, and type filters with counts
Fixes
- Manual "Check for Updates" no longer crashes on dev/source builds
- Harden the native-session registry ownership check so a missing or malformed per-session token on Windows returns a "reused" verdict instead of throwing and aborting the whole list/cleanup sweep
dev3 task listnow works as an alias for the pluraldev3 tasks listinstead of failing with "Unknown subcommand", so the common mistype just does the right thing- The update-ready popover's "what's new" list is now populated on real updates, and GitHub Release pages now include a full grouped changelog (Features, Fixes, Refactors)
v1.38.0
GitHub ReleaseFeatures
- Kanban task cards now show a PR mergeability badge (green "Mergeable" or a red reason such as Conflicts/Blocked/Behind) that replaces the old standalone CI badge; GitHub's merge-state already folds in failing and blocking checks, and the hover popover keeps the per-check breakdown
- Toast notifications can now be dismissed with a rightward swipe (touch or mouse drag), in addition to the existing X button — flinging a toast off the right edge is especially handy on mobile
- Added a Send to Agent action to the diff review export card
- Adds per-task and global controls for merge completion suggestions, including an outcome-card merge prompt and agent-visible CLI changes
- Artifact downloads are now named from the artifact title (sanitized) instead of the source HTML basename, so a titled report saves as "Q4 Revenue.zip" rather than "index.zip"
- The update-ready popover now shows a short "what's new" preview for the incoming version — the top new features plus a fix count — and links to the full Changelog screen
- Added a yellow warning note to the Remote Access modal that appears once the Cloudflare tunnel connects, reminding you to give the domain a few seconds to propagate and to re-toggle the checkbox if the link still errors with "domain not resolved"
- Add a Backspace button to the mobile terminal key bar before the arrow controls so users can delete pasted prompt text without a physical keyboard
- Closed the inline-help coverage backlog: image/artifact viewers, the project shell, the add-project/spawn-agent/task-detail/automation/send-later/bug-hunters modals, all four Project Settings tabs, the rate-limit and token-saving-proxy settings sections, the diff viewer's file list and PR-conversation block, and the inspector's notes and task-details all now carry help topics reachable in help mode
- Add a dev-only "Update Popover Preview" tool under the View → Debug menu that simulates the update-ready popover's "what's new" section for the next release
- The isolated detached-PTY tracer now contains native Windows shells and all descendants in a kill-on-close Job Object
Fixes
- Right-clicking an image inside a shared HTML artifact now shows a "Save image" menu that saves the picture to your Downloads folder
- The task shown in the branch-merged completion prompt is now clickable
- Spawning an in-task Bug Hunter now keeps the originating task assigned to its primary agent and configuration while recording the hunter on its own pane
- In-task Bug Hunters now receive an explicit read-only prompt guard before the normal dev3 session-start checklist
- Make the full pull request conversation header clickable for expanding and collapsing, while keeping resolved-thread, refresh, and GitHub link controls independent
- The empty "Select a task to see its terminal" pane is no longer a dead end: on narrow (mobile) viewports it now redirects straight back to the Kanban board, and on desktop it shows a "Back to Kanban" button
- Wide remote clients no longer show watched-task status-change notifications; narrow remote viewports still receive them for mobile workflows
Refactors
- Extracted a single shared offerMergeCompletion primitive so the "Branch merged → complete the task?" outcome-card prompt has one implementation instead of three drifted copies (the App-level merge-detection push handler and the task info-panel branch-status hook's poll and post-merge paths)
- Centralized task activation, preparation, column moves, teardown, and git watchers behind a per-task lifecycle state machine with declared effects and crash recovery
v1.37.4
GitHub ReleaseFixes
- Claude sessions launched by dev3 no longer show the one-time "bypass permissions" confirmation on startup — dev3 now injects skipDangerousModePermissionPrompt into the managed Claude settings for every session, including when rate-limit tracking is off
- Fixed the header Remote (QR) button needing several clicks to open
- Fixed the task-completion sound not playing in remote mode on desktop Chrome (it worked on mobile)
- Fixed the "Branch Merged" completion popup lingering on the desktop app after it was accepted or declined from the remote browser
v1.37.3
GitHub ReleaseFixes
- Fix the active-tasks split view disappearing in remote (browser) mode on wide screens: the task workspace now shows the ActiveTasksSidebar/SplitLayout whenever the viewport is wide (≥768px), whether desktop or remote, and only hides it on narrow mobile viewports
- Terminal copy now works in remote mode served over plain http: when the browser hides the async clipboard API (insecure context), the OSC 52 payload is written through a legacy execCommand fallback instead of being silently dropped
- Fixed multi-line paste (Ctrl+V) in the browser/remote terminal submitting after the first line — most visible on Windows where the clipboard carries CRLF
- Mouse-copying terminal text no longer leaves the pane stuck in tmux scroll/copy mode
- Fixed the Kanban filter bar and Active Tasks sidebar matching almost every task for short or numeric queries
- Fixed the terminal not filling the full viewport height on first load in remote/browser mode (a large empty area appeared below tmux)
v1.37.2
GitHub ReleaseFeatures
- Every task completion / branch-merged confirm dialog now shows the full task context — task id, project name, priority, labels and overview — so you always know which project a session-destroying prompt belongs to, even when it fires while you are on another board
- Press ⌘F (Ctrl+F on Linux) in any terminal to search its tmux scrollback: a floating bar opens over the pane, matches highlight natively in the terminal, Enter/↑ steps to older matches and Shift+Enter/↓ back to newer ones, with a live match counter
Fixes
- Make unresolved PR comment counts on Kanban cards open the selected task's branch diff and focus the first unresolved review thread, honoring the user's split or fullscreen task-open preference
- Fixed the Launch Task modal preselecting a broken default when the saved global default config belonged to a different provider than the default provider (which left the Mode field empty and the launch inert)
- Strip the user-global CLAUDE_CODE_DISABLE_MOUSE_CLICKS environment variable at startup so it never propagates into dev3's tmux panes
- Terminal input now resumes without Escape after copying text: a plain terminal click exits retained tmux copy mode, and Back to Terminal restores focus after selecting text in Diff
v1.37.1
GitHub ReleaseFeatures
- The shared-image lightbox now supports pinch-to-zoom and drag-to-pan with touch, plus double-tap and ctrl-wheel to zoom, so images surfaced via
dev3 show-imageare usable on small mobile screens - Added a ⇧Tab button to the mobile terminal extra key bar, next to Tab
Fixes
- Prevented Diff View from crashing in split mode when a persisted inline comment exists on only one side of a row
- Fixed the mobile Task actions sheet staying open after tapping the Images row — it now closes as it already did for the Artifacts row, so the image viewer opens on a clean surface
v1.37.0
GitHub ReleaseFeatures
- Claude sessions now always launch with --allow-dangerously-skip-permissions, so the dangerous bypass mode is available to toggle into (Shift+Tab) from any preset without being enabled by default
- The Add Project → Clone from URL modal now shows live
git cloneoutput while cloning: a terminal-style box displays the last four progress lines (remote counting, receiving objects, resolving deltas), so large repository clones are no longer a silent "Cloning…" button - Mobile attachments: the touch key bar next to the terminal composer now has a paperclip button that opens the OS photo/file picker and drops the uploaded worktree path into the draft (or straight onto the prompt in raw mode), and pasting an image from the phone clipboard into the composer uploads it the same way
- The diff viewer now shows the task PR's GitHub review threads inline on their diff lines (branch mode) and a collapsible Conversation block with the PR's top-level comments — read-only, markdown-rendered, with deep links to GitHub and a show-resolved toggle
- The web/remote interface now shows a favicon using the new dev3 app icon, so the browser tab and bookmarks display the dev3 logo instead of a blank globe
Fixes
- The Remote Access modal now gives immediate visual feedback after copying its URL: the button briefly switches to a green success state with a checkmark and localized “URL copied” label
- Fixed the mobile task view never showing the diff summary badge ("N files +X −Y") in the summary bar: branch status was only fetched by the desktop git bar, which does not render on narrow viewports
- On phones, tapping a PR/CI/review badge on a kanban card (or the PR row in the task inspector) now opens the PR status and checks in a full-width bottom sheet with an explicit "Open PR" link, instead of the tiny hover popover that also navigated away to GitHub
- Fixed the branch diff, ahead/behind status, and rebase/merge base for PR-review and other tasks created on an existing branch
- Remove the persistent browser-only active-task strip so remote task workspaces keep the terminal full-width without the distracting horizontal scrollbar; existing task-switcher and breadcrumb navigation remain available
- Task ids are now stable across launches: launching a To Do task (Launch Variants, scheduled launch) transforms it in place into variant #1 instead of deleting it and re-creating every variant under a fresh id, so the id printed by
dev3 task createnever dangles - Fixed the task header showing the previously viewed task's PR badge (number, unresolved comment count, CI/review popover) after switching tasks
- Mouse-drag copying in tmux now keeps the terminal at the current scrollback position instead of exiting copy-mode and jumping to live output
Refactors
- Consolidated every tmux interaction behind a typed TmuxClient module (src/bun/tmux/): all 63 raw tmux spawn sites, 5 output parsers, 3 separator conventions and inline dev3-* session naming collapsed into one client with typed subcommand methods, declarative -F formats and a reverse session-name parser
v1.36.0
GitHub ReleaseFeatures
- macOS releases now bundle a self-contained pinned tmux 3.6a (statically linked libevent_core and utf8proc, only OS libraries otherwise) inside both the app bundle and the CLI tarball, so DMG and in-app-updater installs work without Homebrew or Command Line Tools
- Task creation now includes a project picker that defaults to the current board, allowing users to create and launch tasks in another project without navigating away
- Adds the existing compact priority picker to the task info header beside Watch, including the narrow task summary bar
- Mobile task view: removed the duplicate task title from the status bar (it already appears in the breadcrumb above), freeing space
- The agent rate-limit indicator now shows every Claude and Codex account with local activity in the last 24 hours, attributing each usage row to its managed account and retaining monthly Codex credit details per account
- Global Settings now uses seven searchable categories with localized title and description matching, legacy deep-link compatibility, and a narrow list-to-detail layout
- Kanban task cards now restore the last cached GitHub PR status, including checks and unresolved comments, while hover refreshes the latest result without blanking the popover
- Add an optional
--durationflag todev3 notifyfor short-lived in-app toasts from 2 to 30 seconds; thessuffix is optional, so--duration 15means 15 seconds - Dev builds (channel "dev", i.e
- Dev3 now keeps detected GitHub PR identity on tasks, refreshes CI and review-thread status through adaptive polling, and shows checks, conflicts, and unresolved comments in an in-app PR status popover
- Mobile remote mode overhaul: sessions now ride an HttpOnly cookie backed by a disk-persisted secret, so your phone stays signed in across desktop app restarts and overnight idle (24h rolling), and a dead session shows a clear "scan a fresh QR" screen instead of an infinite reconnect spinner while genuine network blips keep auto-retrying
- PR status popovers now show whether auto-merge is enabled, whether the pull request is mergeable, and specific GitHub-derived blockers such as unresolved comments, missing approvals, and failed checks
Fixes
- Widen the Favorites popover so long agent, model, and mode combinations remain readable instead of being clipped
- Keep a task's detected pull-request link after GitHub merges it by refreshing the sticky PR record and reporting the merged state in the existing PR status popover
- Unit and E2E test processes now sandbox HOME, temporary files, XDG state, logs, tmux configuration, and DEV3 data under a per-worktree, per-suite run directory
- Keep the Remote Access QR icon blue and animated continuously while the Cloudflare tunnel is starting or connected, including after the QR modal closes
- The app now detects when it is the Intel (x64) build running under Rosetta 2 on an Apple Silicon Mac and shows a startup warning with a copy-pasteable reinstall command (Homebrew cask when native brew is present, otherwise the arm64 DMG)
- Removed the standalone browser application-menu row from narrow/mobile layouts, reclaiming 32px above the global header while keeping the existing More bottom sheet and command-palette touch entry available
- Fix mobile terminal message delivery by using one paste-aware submit operation
- Mobile browser fullscreen now re-arms its first-tap gesture after any exit, so tapping the app restores fullscreen while preserving the browser's user-gesture requirement
- On narrow Kanban boards, the carousel now opens on Has Questions when it contains tasks and falls back to Your Review when it is empty
- Keep mobile dev-3.0 sessions in portrait orientation by attempting a browser orientation lock and blocking unsupported landscape sessions with a localized rotate prompt
- Keep the Completed and Cancelled Kanban columns reachable in the narrow carousel while preserving explicit user column-collapse choices
- Mobile layouts now show only the newest in-app notification toast at a time, while desktop keeps the existing five-toast capacity and task-scoped overflow fallback
- Finishing or cancelling one task no longer clears a different task that the user selected while the completion preflight was still running
- Completed and Cancelled Kanban columns now sort by when each task landed there — freshest on top — instead of by priority
- Tmux paths and shims now require a real executable tmux binary,
dev3 doctordetects poisoned saved paths and provides repair steps, and failed task launches show the actual error after returning to To Do instead of failing silently - Toast timers now pause while a renderer is hidden, unfocused, hovered, or focused, resume from their remaining budget, and cap each visible stack at five entries
v1.35.2
GitHub ReleaseFeatures
dev3 task createnow accepts--description -and reads the full task description from stdin, preserving multiline Markdown without shell quoting- Show P{n} badges in the leading marker slot of visible dashboard task rows and sort those rows by priority, preserving the existing status ordering within each priority band on narrow screens
- Add VS Code-style Ctrl-minus and Ctrl-Shift-minus aliases for back and forward route navigation while preserving the existing bracket shortcuts
- The Active Tasks sidebar "zoom" icon is now a VS Code-style panel toggle, with a matching counterpart in the fullscreen task toolbar that brings the panel back
- Add an ephemeral task-terminal immersive fullscreen mode with a minimal dev3 exit strip, F11 and Cmd/Ctrl+Shift+F toggles, shortcut tooltip guidance, preserved tmux layouts, and notification navigation that exits fullscreen first
Fixes
- Active Tasks now shows the same muted teardown animation as Kanban while a completed or cancelled task closes its session and worktree
- Clicking the already-focused task in Active Tasks no longer returns to the Kanban board
- File drops now restore focus to the editor immediately before the asynchronous upload begins, keeping chat and task-description inputs ready for continued typing while attachments are saved
- Clear the scratch semantic flag when UI or CLI title edits turn a scratch task into a normal task
- Watch now has an explicit “Watch tasks by default” preference in Settings → Behavior
- The mobile terminal composer Send button now appends two Enters after pasting a prompt, while Insert and the Ctrl/Cmd+Enter shortcut keep their existing behavior
- New custom columns created from the Kanban board are inserted immediately before Completed and the full column order is persisted, keeping the new column beside the board's add-column affordance
v1.35.1
GitHub ReleaseFeatures
- Variant task cards and active-task surfaces now share bounded sibling navigation, while the task inspector and keyboard shortcuts provide fast switching between live variants
Fixes
- Remote Access now automatically starts a Cloudflare tunnel when
cloudflaredis installed and keeps the public URL out of the QR modal until Cloudflare DNS has had five seconds to provision the hostname - Codex profile migration now switches to per-profile config files at Codex 0.134.0, removes nested managed legacy profile tables, and detects the installed version after the user's shell PATH is loaded
- Codex account management now identifies duplicate logins by ChatGPT workspace, so one email can keep multiple workspaces
- Disabled Git actions now explain their blocking state through the styled tooltip, including uncommitted changes and missing local commits
- The Agent rate-limit popup now shows each account's workspace/organization name as a consistent "email · workspace" row, so two accounts sharing the same email in different workspaces are no longer indistinguishable, and the popup is widened so long rows fit on one line
- Remote Access now records cloudflared output in the daily app logs, detects stalled edge connections, restarts stale Quick Tunnels, and refreshes rotated URLs in open QR and exposed-port surfaces
v1.35.0
GitHub ReleaseFeatures
- Prioritize GPT-5.6 Luna X-High and Max Codex presets, expose every available effort tier for Sol, and order the models Luna → Sol → Terra → GPT-5.5
- Added a "Recent commits" diff mode to the task diff viewer for quickly inspecting an agent's latest commits
- Automation schedules now let you pick which weekdays a "Daily" run fires on: quick presets (Every day / Weekdays / Weekend) plus per-day toggles, so you can schedule "every day except weekends" in one click
- Agent accounts can now be chosen per launch
- Added "Send later" scheduled messages: queue a one-shot prompt to a task's live agent to be delivered at a wall-clock time or after a delay
- Add Composer 2.5 as a selectable Cursor Agent model preset in the launch picker
Fixes
- Fixed the chronic dev-server stop/restart failures ("Empty response from server" / refused control socket, #910/#920): when a project's devScript boots a dev3 app of its own (dev-3.0 dogfooding), that guest instance won CLI socket discovery and killed itself mid-teardown before replying
- Claude Code task hooks now move a task to in-progress as soon as AskUserQuestion completes, rather than waiting for the next tool call
- Task descriptions now autocomplete Codex skills with
$even when Codex is selected only at launch - Diff code text now follows the app zoom level instead of remaining fixed at 14 pixels, so Command-Plus and Command-Minus keep code readable alongside the surrounding interface
- PR Review tasks now always appear in the Active Tasks sidebar's top Needs You queue and the attention filter
- Fixed the task priority (e.g
- Widened the Launch Task / Retry modal so the Provider, Model, and Mode dropdowns have enough room to show their full labels instead of truncating them (e.g
Refactors
- Refactored all per-agent launch/trust/hooks/skill differences behind a single AgentAdapter abstraction (one adapter per coding agent plus a GenericAdapter fallback), replacing the scattered
is*Commandladders
v1.34.0
GitHub ReleaseFeatures
- Added Favorites to the agent launch picker: star your go-to provider/model/mode combos and pick them in one click
- Session recovery now resumes the exact previous session for more agents
- Task cards now show a muted "Shutting down…" state (the opposite of the blue "preparing" loader) while a completed/cancelled task tears down its session and worktree — a window that can last several seconds
Fixes
- Create PR and other agent hand-offs now target the initial Codex pane before its first lifecycle hook runs
- Restore the mobile terminal header when Android dismisses the composer keyboard without blurring its textarea
- Fixed mobile project switching so stale task cards cannot open under another project's breadcrumb
- Mobile remote sessions now recover both RPC requests and the active tmux terminal after the browser returns from the background
- Reworked the agent skill's public bug-report offer: agents must never mention the private vent channel to the user, and the offer to open a GitHub issue is now a friendly, explicit ask ("I stumbled on a dev3 bug — may I open a public issue using your gh account?") instead of an announcement that a report was already sent
- The agent rate-limit header badge and the Claude window rows in its tooltip now spell out that the percentage is the amount "used" (e.g
v1.33.0
GitHub ReleaseFeatures
- Labels in Project Settings can now be reordered — drag the grip handle or use the up/down arrows on each label row
- The Active Tasks sidebar now shows each task's priority as the same colored P0–P4 badge used on the kanban card (click it to re-prioritize the whole variant group), and groups the queue into readiness tiers — Needs You, your custom columns, then Waiting — each sorted by priority band with the longest-waiting task on top
- You can now create a custom column straight from the Kanban board: a slim dashed "+" affordance sits just before the Completed column, and clicking it adds a column that opens directly in inline rename so you can name it in place without opening Project Settings
- Editing a todo task's description now supports drag-and-drop and clipboard-paste image/file upload, with an inline attachments strip — matching the create-task modal
- Project Settings → Labels now shows a task-count badge next to each label, so you can see at a glance how many project tasks currently carry it (0 is dimmed to flag unused labels)
- The agent rate-limit indicator tooltip in the global header now shows which account each Claude/Codex limit belongs to — the active account's email/label plus its plan tier (or an API-profile marker) — so it is clear whose limits you are looking at
- Remote and mobile-browser sessions now surface faults in the UI instead of hanging on a blank "Loading…" with no way to see what broke
- Tasks now have a priority (P0 highest … P4 lowest, default P2) shown as a colored badge on every card — a red → orange → yellow → green → grey heat ramp by importance; click it to change
- Added VSCode-style token-DSL filters to both the Kanban board and the Active Tasks sidebar
- Give every dev3 task a pristine branded HTML artifact starter with semantic tokens, responsive interactive components, and an Auto/Light/Dark theme switch
Fixes
- Fixed
dev3 currentso its custom-columns hint actually appears: the offline data reader used to drop the project's customColumns, so the section silently never rendered (even online) dev3 dev-server statusno longer hard-crashes with a rawposix_spawn ENOENTwhen tmux can't be launched (usually macOS Full Disk Access lost)- Clicking the "Agent shared an image" toast now navigates to the task that produced the image (honoring your task open-mode) before opening the lightbox, instead of opening the viewer without switching focus
v1.32.1
GitHub ReleaseFeatures
- Teach dev3 agents to offer public GitHub bug reports after sending private vents
- Added GitHub pull-request link support to the Create Task modal
- Added
dev3 show-artifact <file.html> [--images <image...>] [--title "..."]for task-bound interactive HTML reports - Add average task lifetime to Productivity Stats, measured from the first in-progress transition to completion
- Tasks now track how long they took: total lifetime, agent time (coding + AI review), and your real focus time (the minutes a task was actually on-screen and active)
Fixes
- Improved terminal contrast for every Claude Code
/themevariant - Fixed Codex skill invocation in Find bugs and Create Task
- Fixed
dev3 dev-server stop/restartintermittently failing with "error: Empty response from server" during the tmux socket handoff - Convert scratch tasks into normal tasks when their description is edited, so multi-variant launches deliver the meaningful prompt to every agent
- Fixed GA4 "Page path" being empty by sending page_location as a real https URL (https://dev3.local/app/...) instead of the custom app:// scheme, which GA4's URL parser cannot turn into a Page path
- Task cards now show the most recently launched agent and configuration, including its launcher icon, immediately after extra-agent and bug-hunter launches
- Scheduled task launches now stay visible when their live update races the project board's initial task load
v1.32.0
GitHub ReleaseFeatures
- Velocity Cockpit now includes local Codex rollout token usage and API-equivalent model costs alongside Claude usage, with cached input priced separately and unknown preview models reported without guessed rates
- Codex now receives the dev3 task-lifecycle protocol as a developer-role message via the
-c developer_instructions=...config override instead of having it appended to the first user prompt - Refreshed the Codex launch presets for OpenAI's new model lineup: GPT-5.6 Sol, Terra, and Luna now expose curated Bypass-first effort ladders with bracketed effort labels, while Sol remains the frontier default with dedicated Default and Plan workflows
Fixes
- AI-assisted Git actions now follow the active Codex pane when the task also has another registered agent pane, instead of sending the prompt to the wrong agent
- Fixed Codex terminal colors by launching it with GitHub in the light theme and Dracula in the dark theme, while preserving user configuration outside dev3
- Codex tasks now leave Agent is Working reliably, move approval waits to User Questions on Codex 0.122+, and select the correct review column through one atomic lifecycle handler
- Fixed and enriched the GA4 analytics
Refactors
- Cut the dev3 skill's token footprint: the Claude SKILL.md no longer duplicates the protocol already injected into the system prompt (a PROTOCOL.md fallback covers sessions started outside the launcher), the skill invoke now uses
dev3 current --briefinstead of re-printing the full help and task description, and the shared skill body was rewritten ~40% denser for all agents
v1.31.0
GitHub ReleaseFeatures
- Added a High effort tier to the Fable 5 Auto and Bypass launch presets (previously only Medium and X-High)
- Added an agent account switcher: Settings → Agent Accounts keeps multiple Claude Code and Codex logins and hot-swaps the active one without re-login
- Local dev launches (
bun run dev/bun run start) now open a fresh, centered window on the dashboard instead of restoring the last window geometry, macOS fullscreen, and last open task - Added a per-agent LLM Provider toggle in Settings → Coding Agents — each agent can run on its native API (default) or a registered third-party backend (Amazon Bedrock for Claude)
- The Scripts (ƒ) dropdown now also parses the worktree's Makefile and lists its targets alongside package.json scripts
- On narrow (mobile) viewports the global header no longer shows the prevent-sleep, rate-limit, git-pull, and tmux-sessions widgets inline; they now fold into the kebab (⋮) bottom sheet as a controls strip, decluttering the mobile header
- Agents are now told to give any tmux window they open a short human name (dev-server, logs, tests) via -n or rename-window, and to proactively rename windows still stuck on a generic auto-name (node/zsh/bash/claude) whenever they list the session — so the terminal tabs read clearly instead of "node"/"zsh"
- Added an opt-in "Fable 5 (cost trick)" agent preset that routes Claude through the local pxpipe token-saving proxy (ANTHROPIC_BASE_URL)
- In the Option+Tab task switcher, Shift now toggles the "all projects" scope with a single tap (sticky) instead of only working while held, with a clear scope-toggle hint in the footer
Fixes
- Fixed the agent account switcher in the task-launch picker: the account list now opens above the trigger (it previously spilled below over the Launch/Cancel buttons) and closes before the confirm dialog
- Fixed the automation create/edit modal rendering partially off-screen
- Fixed the dev3 CLI dumping a raw "EPIPE: broken pipe" stack trace when its output was piped into a consumer that closes early (
dev3 ui state | head,| grep -m1, quitting a pager) - Pulling origin now retries once when git fails with "Cannot fast-forward to multiple branches" — a transient race with a concurrent background fetch rewriting FETCH_HEAD
- Fixed Remote Access showing a blank page when opened directly over the LAN (non-Cloudflare) — the large JS bundle was served via Bun's zero-copy sendfile path, which drops the HTTP response headers over a real network socket on macOS, so the browser rejected it and the app never mounted
- Fixed the Create-PR / auto-merge / rebase-conflict hand-off writing its prompt into whatever pane happened to be focused
- Fixed the task branch name shown in the GUI (header, cards, detail modal) staying stale after the branch was renamed inside the worktree
- Fixed the "use existing branch" search in the new-task modal returning no results once the typed query contained a dash
- Survive Homebrew fighting the in-app updater: child processes now default their working directory to ~/.dev3.0 so a
brew upgradethat replaces (or rips away) the .app bundle can no longer break child process spawning (tmux ENOENT) in the running instance, and the Homebrew cask is markedauto_updates trueso a bulkbrew upgradeskips dev3 instead of colliding with in-app-updated installs (explicitbrew upgrade --cask dev3still works) - Fixed the version bump script pushing all local tags (
git push --tags) instead of just the new release tag - Made the cloudflared install command in the Remote Access (Cloudflare Tunnel) section readable and copyable — it was rendered in the lowest-contrast tiny text
- Fixed the desktop window opening blank grey with "Resource not found" errors
- Enlarged the shared-image viewer to fill ~90% of the viewport (≈5% margin each side) instead of a small capped card, and made it eager-load every image so the thumbnail rail always shows a real picture instead of a placeholder icon that only filled in as you scrubbed between shots
- Made the New Task creation modal usable on narrow/mobile viewports: the fixed 520px width now clamps to the viewport, the modal scrolls instead of clipping the Save actions on short screens, and the footer action buttons wrap gracefully instead of cramming into one overflowing row
- Rebuilt the Task actions bottom sheet on narrow (mobile) viewports
- Replace GitHub's auto legacy "Deploy from a branch" Pages workflow with a custom Actions workflow that only runs when docs/ changes, serializes deploys via a concurrency group, retries the deploy once in-job to absorb transient "Deployment failed, try again later." backend errors, and never fails the run (emits a warning instead) — eliminating the false "Run failed" deployment emails
- Fixed Quick Shell (⇧⌘`) opening a scratch op in a chrome-less terminal with no task header or tmux controls
- Fixed the Scripts runner dropdown overflowing past the right screen edge on narrow windows (mobile/remote browser)
- Fixed spawning an extra Codex agent (Spawn Agent modal) or a Codex bug-hunter crashing with "--profile dev3-dark cannot be used while config.toml contains legacy profile"
- Unit tests no longer pollute the real ~/.dev3.0/logs with fake ERROR/WARN lines: logger.ts now redirects to an isolated tmp dir under vitest (or a DEV3_LOG_DIR override), so no test worker touches the production daily log
Refactors
- Replaced the git-pull button's CSS ring spinner with the smoother SVG spinner already used by the "checking for updates" header indicator, so both loading states look identical
- Removed the Kanban board split-view mode from the task view
v1.30.0
GitHub ReleaseFeatures
- The Rebase git button now handles conflicts instead of going dead
- Extracted the Provider → Model → Mode launch picker into a shared AgentConfigPicker component and rolled it out to every surface that still used the old two-dropdown Agent + Configuration form: Spawn Agent, Spawn Bug Hunters, the global default-agent setting, and the per-column auto-launch agent
- Added Automations — scheduled agent runs
Fixes
- Fixed macOS Intel (x86_64) builds crashing instantly on launch: Apple's codesign silently overwrote the start of the code section in Electrobun's zero-headerpad Zig binaries (launcher/extractor/libasar), producing signed, notarized apps that segfault
- On mobile devices the task terminal and diff screens now render at ~2/3 scale (1.5× denser), fitting noticeably more content where space is scarce
- Clicking a native macOS notification now reliably focuses the task that triggered it, whenever the click happens
v1.29.3
GitHub ReleaseFeatures
- Added an ambient agent rate-limit indicator to the global header: dev-3.0 now tracks Claude Code limit windows (5h/7d, % used + time-to-reset) by routing launched sessions' statusLine through a
dev3 statuslinewrapper (the user's own statusLine keeps working — dev3 delegates to it and appends a compact usage segment), and Codex windows/credits parsed from local session rollout files - Added a bright animated "?" button to the global header — visible on every screen, it triggers help mode ("Explain this screen", same as ⇧⌘/)
Fixes
- Fixed the "Restart to Update" button silently doing nothing
v1.29.2
GitHub ReleaseFixes
- Fixed the tmux PATH shim (
~/.dev3.0/bin/tmux) symlinking onto itself for users without the vendored tmux@3.6 keg (e.g
v1.29.1
GitHub ReleaseFixes
- Pin tmux to 3.6a: tmux 3.7 clients busy-spin at 100% CPU on a congested server socket, freezing the UI for 10-35s
- Fixed Ctrl+C being completely ignored when the app runs under
bun run dev
v1.29.0
GitHub ReleaseFeatures
- Redesigned the Launch Task / add-variant agent picker from a flat 2-field control (Agent + one long Configuration dropdown — 21 presets for Claude) into a 3-field Provider → Model → Mode cascade, so you narrow from ~4 models to ≤7 modes instead of scanning one 21-row list
- Tmux toolbar icons now animate on hover, acting out the operation they trigger: splits saw their divider across, cycle-layout swaps the panes, zoom inflates the pane, close draws the X and blinks the pane out, layout presets draw their dividers, and the mobile New Window icon pops into existence
- Surface how to close a terminal pane in the hotkeys reference: the "i" tmux hints popover and the ⌘/ Keyboard Shortcuts overlay now list Ctrl+D (exit shell → close pane) alongside the existing ⌃B x
- Close Pane is now a two-step visual picker instead of blindly killing the active pane: click it, then hover the exact tmux split you mean and click to close it
- Added an inline help system: fast styled tooltips replace the slow native hovers on icon toolbars, small (i) icons in section headers (settings, board columns, modals, diff viewer, stats) open rich help cards explaining what each section does, and a new help mode (⇧⌘/ or Help → Explain This Screen) highlights every zone of the current screen with clickable explanations
- iTerm2 terminal hotkeys (⌘D/⌘⇧D split, ⌘W close pane, ⌘T new window, ⌘[/⌘] navigate) now ship on by default instead of being opt-in
Fixes
- Fixed four data-layer bugs in the dev3 CLI: concurrent
note add/note delete/label create/label deleteno longer lose each other's writes (they now recompute inside the file lock); a too-short or ambiguous--task/--projectprefix is rejected instead of silently resolving to the wrong entity;label setrejects unknown label IDs instead of persisting garbage; and launching a To Do task with variants now carries its notes and overview onto the variants instead of dropping them - Fix three task-lifecycle race conditions found in a bug-hunt pass
- Fix two CI gate gaps found by a bug-hunt pass:
bun run lintsilently reported success when tsc failed to run at all (corrupt tsconfig, missing binary, crash) because it only surfaced diagnostics prefixed withsrc/and never checked the exit code — it now fails loudly on global/config tsc errors and on a nonzero exit without per-file diagnostics - Fixed multi-second UI freezes (frozen terminals stuck on "Connecting...") caused by synchronous process spawns blocking the main event loop
- Fixed three bootstrap-layer bugs found in a bug-hunt pass: concurrent port allocation could hand two parallel task variants overlapping ports (now serialized with a cross-process file lock that re-reads assignments under the lock); the dev-channel Vite probe fetch had no timeout and could hang app startup forever if something squatted port 5173 (now bounded to 1s); and the dev3 CLI binary was copied non-atomically on every launch, so an agent exec'ing it mid-copy could hit a partial binary (now written to a temp sibling and atomically renamed into place)
- Fixed all new tmux panes (setup, rebase/git-op panes, splits, dev-server) starting in a wrong deleted directory after the Homebrew tmux 3.7 upgrade
- Fixed four UI rendering bugs found in a bug-hunt pass: dragging to reorder a task within a Kanban column dropped it at the wrong (doubled) position because the drop-index counted both the card wrapper and the card root; a drop below the visible cards in a truncated column (>15 tasks) silently moved the task into the hidden tail; the task-age badge showed "0y" for ages between 360 and 364 days; and colon-form ANSI color codes (e.g
dev3 config shownow reports an accurate source for every setting — local, repo, project, default, or unset — instead of collapsing project-object values, defaults, and truly-unset keys into a misleading "global"- Fixed
dev3 dev-server statuscrashing with "undefined is not an object (evaluating 'ports.length')" when a newer CLI talks to an older running app that never sent thedevPorts/portConflictsfields - Fixed a bug in the Create Task modal where a task created successfully but failing to apply its custom title or labels would vanish from the board (invisible orphan) and let a retry create a duplicate
- Isolated the browser-QA flow per task so parallel agents stop stomping each other
v1.28.0
GitHub ReleaseFeatures
- The Velocity Cockpit now shows agent token usage and an API-equivalent cost for the selected period, reconstructed entirely from local Claude Code transcripts (no API calls)
- Added iTerm2-style Alt/Option-click in the terminal to move the shell cursor: at a plain shell prompt, holding Option/Alt and clicking a cell walks the cursor there (the backend asks tmux what runs in the clicked pane, so TUIs like vim or htop are never touched)
- In-task bug hunters now report findings as dev3 notes instead of leaving them trapped in their own tmux pane
- Added
dev3 show-image <path> [--caption "..."] [<path> ...]— agents can now surface images (screenshots, agent-browser captures, rendered charts) to the human in an in-app viewer bound to the task, with a clickable history (newest shown first) - Added prev/next period navigation to the Productivity Stats page so you can browse past days, weeks, and months instead of only the current period
- Added a global Terminal scroll speed slider in Settings → Appearance
- The To Do task detail modal now has a footer where you can start the task: a green Run button (opens the launch-variants picker), an editable labels row, and a Delete action
Fixes
- Fixed remote access via the Cloudflare tunnel silently failing (QR/link showed as active but the trycloudflare.com URL never resolved) on networks that block outbound QUIC/UDP 7844
- Dev-server stop/restart now verifies teardown instead of fire-and-forget: processes are polled until actually dead (SIGTERM → SIGKILL escalation), daemonized devScript orphans holding the task's pool ports are found via port ownership and reaped, and stop waits for the ports to be released before returning
- Fixed the "GitHub CLI (gh) is not signed in" false negative for gh versions (~2.50–2.63) that lack
gh auth status --jsonbut print the modern plain-text wording "Logged in to <host> account <login>" — the fallback parser only matched the old "as <login>" wording - Landing page conversion & performance pass: fixed the dead mobile nav menu (missing
.nav-links.showCSS), cut initial page weight from ~6MB to ~1MB (192px nav/favicon icon instead of the 1.4MB original, hover-preview gif replaced with a 150KB mp4, lazy-loading on below-fold images, hero carousel slides 2+ deferred until page load), reworked the Get Started section into macOS/Linux install cards with copy-to-clipboard Homebrew commands and direct DMG links, added a dedicated Remote section, pointed Download buttons at releases/latest, and added robots.txt, sitemap.xml and JSON-LD SoftwareApplication markup - Adapted several surfaces to narrow (phone) viewports
- Fixed the New Task slash-command autocomplete so it now also lists project-local skills (
.agents/.claude/.codex/skillsinside the repo, e.g - Restore the last route (project/task/screen) across app restarts — quit, reboot, and auto-update — not just the window position
- Completing or cancelling a task from the task info panel's status dropdown, the terminal error screen, the preparing-view cancel, or the in-panel "Branch Merged" auto-complete now lands fullscreen open-mode users on the Kanban board instead of the split task view
v1.27.4
GitHub ReleaseFeatures
- The main window now remembers its position, size, screen, and macOS fullscreen state, and restores them on relaunch — so an auto-update restart no longer yanks the window to the center of the primary display
- Overhauled the built-in Claude preset list: added a pinned Sonnet 5 model block, added Medium/X-High reasoning-effort variants for Opus 4.8 and Sonnet 5 Auto/Bypass (replacing their plain-effort versions), dropped "Don't Ask" presets and the redundant generic "Sonnet" alias block, trimmed the Opus 4.7 fallback to Auto+Bypass, and moved Fable 5 to the top of every mode group
- Made the Dashboard Activity view usable on a phone (sub-768px / dev3 remote): project cards go full-width, per-project actions and reorder collapse from the hover icon row into a touch kebab that opens a bottom-sheet (Open board, Settings, Finder, Terminal, Move up/down, Remove), and touch targets are bumped to ≥44px
- On a narrow viewport (phone via dev3 remote / narrow window) the terminal now shows a "Panes & windows" button above the pane that opens a bottom sheet to split the pane (horizontally/vertically), open a new tmux window, or close the current pane — previously only reachable via the ⌃B prefix, which is impractical on a phone
- Added a narrow-viewport (mobile) tmux windows switcher: a slim bar above the panes carousel lets you list and move between tmux windows (separate workspaces in a session) with prev/next chevrons, a named dropdown, and Arrow keys
Fixes
- Fixed the task setup pane crashing with "not an identifier: -s" when pressing a key at the "press any key to close" prompt
- Fixed Stop (and Restart) leaving the dev server running: the process-tree reap used
pgrep -P, which returns nothing when spawned from the packaged GUI.app(sandbox blocks its sysctl), so only the tmux pane was killed and the launched app stayed alive - Fixed a flaky CI test: the FolderPickerModal focus-trap test now polls for focus to land inside the dialog (useFocusTrap moves focus from a passive effect, so the old synchronous assertion raced under CI scheduling jitter)
v1.27.3
GitHub ReleaseFeatures
- The
bun run devscript now binds the dev app's remote web UI to the task's first pool-allocated port (DEV3_REMOTE_PORT=${DEV3_PORT0:-0}), so the QA URL is derivable fromdev3 dev-server statusinstead of scraping a random port or starting a separatedev3 remote - On a narrow viewport the terminal pane carousel gains a "zoom-out" overview: a grid button opens a bottom sheet that draws a spatial mini-map of the active tmux window's panes by their real geometry (like the boxes
dev3 ui stateprints) — tap a box to jump to and zoom that pane - The Dev Server button now shows its live state at a glance: neutral with a play icon when stopped, a spinner while starting, and green with a pulsing dot while running (previously it looked identical in every state)
- Added narrow-viewport carousel navigation for the Kanban board (Level 1)
Fixes
- Fixed the git pull button's loading spinner (and the identical task git-action spinners) appearing off-center
- Fixed a regression where a double-click selection in the terminal stayed highlighted in place while the content scrolled or repainted underneath it (notably inside Claude Code)
- Stopping a task's dev server now kills its entire child process tree, not just the tmux pane
- Fixed completing a task jumping users to the wrong surface
v1.27.2
GitHub ReleaseFeatures
- Added a Productivity Stats dashboard ("Velocity Cockpit") — a stylish full-screen view that proves how much you ship: tasks completed over time, lines of code changed, projects/tasks/agents counts, streaks, busiest project, and per-project and per-agent breakdowns, with a day/week/month/all time-range switch
- Improved the
dev3 remoteexperience for headless Linux: addeddev3 remote restartanddev3 remote logs [--follow] [--lines <n>];--static-codeis now refused on a default-on public tunnel (no replay protection) unless--no-tunnelis also passed; the browser "Session Expired" screen now tells you to rundev3 remote urlon the host instead of pointing at a non-existent desktop app; thedev3 guibundle URL is arch-aware (arm64 hosts no longer silently fetch the x64 bundle); and fixed stale--tunnel/--detachhints in the CLI help and console banner
Fixes
- Generated Claude Code lifecycle hooks now treat the dev3 CLI's "app not running" exit code (2) as a non-blocking no-op, so editing files, running tools, submitting prompts, and stopping keep working when the desktop app is closed mid-session (e.g
- Restore the "Your Review" column on Operations (virtual) boards
- Fixed
dev3 remotedying on startup ("Unknown command: /$bunfs/root/dev3") on the compiled binary
v1.27.1
GitHub ReleaseFeatures
- In Remote Access (browser) mode the app now renders its own File/Task/Project/View/Terminal/Help menu bar at the top of the window, since the native macOS/Linux menu bar isn't available in a browser
- Made app keyboard shortcuts transport-aware in browser remote mode: shell-only combos (⌘Q, ⌘H, New Window, zoom, hard refresh) are dropped and yielded to the browser, ⌘1–9 / ⌘N fall back to their browser-safe aliases (G then 1–9 / C), the Keyboard Shortcuts overlay shows the remote keymap with a notice, and "Open in Finder" is hidden from the command palette in the browser since it targets the server host
- Improved
dev3 remotefor remote-Linux use - Browser Web Notifications in remote mode: when the UI is opened in a browser via
dev3 remote,dev3 notify --desktopand watched-task status/event banners now fire a real Chrome/Safari desktop notification (clickable, opens the task)
Fixes
- The main dashboard's per-project activity now lists PR Review tasks and tasks parked in custom columns as their own rows, instead of burying them in the collapsed background summary
- Escape now reliably closes any open modal, lightbox, or popover instead of dropping the app out of native fullscreen
- Fixed the task complete/cancel sound playing twice in remote mode when the desktop app and a browser are both connected to the same machine
- Fixed Claude agent-team teammates falling back to manual approval when the lead launched in an auto-approve mode (Auto, Bypass, Accept Edits, Don't Ask)
- Extended the update toast auto-restart countdown from 5 minutes to 15 minutes, giving users more time before the app restarts itself to install a downloaded update
Refactors
- Merged the standalone
dev3-serverheadless binary into thedev3CLI: it's now a single binary, anddev3 remoteboots the headless server in-process via a dynamic import instead of spawning a sibling
v1.27.0
GitHub ReleaseFeatures
- The Watch toggle in the launch/create-variant dialog now remembers its on/off state as a global default and applies it to the next tasks you launch
Fixes
- Fixed tasks silently vanishing from the Kanban board when their customColumnId pointed to a deleted custom column
- Fixed a stale-lock break race in withFileLock where two processes sharing ~/.dev3.0/ could both break and acquire the same lock, risking silent data loss in tasks.json/projects.json
- Fixed the "Disable feature tips" setting being silently lost on app restart (and then erased from settings.json on the next settings change)
- Fixed the Launch Variants and Spawn Agent modals spawning agents when pressing Enter while the agent/config picker or the Watch/Cancel/Add/Remove buttons were keyboard-focused — Enter now only launches when no interactive control is focused
- Task creation now verifies the write actually landed on disk before reporting success
v1.26.1
GitHub ReleaseFeatures
- Project hook scripts (setup/dev/cleanup) now receive workspace env vars (DEV3_PROJECT_PATH, DEV3_PROJECT_NAME, DEV3_TASK_TITLE, DEV3_WORKTREE_PATH, DEV3_BRANCH_NAME) so git-ignored hooks in .dev3/config.local.json can be resolved from the project root, mirroring the Superset workspace-hook contract
Fixes
- Fixed a bogus "PTY cwd missing" error that was logged for every valid terminal directory: the existence probe now uses fs.access instead of Bun.file().exists(), which always returns false for directories
- Fixed the "Unpushed" diff mode showing changes that aren't yours when the branch's upstream has diverged from HEAD (after a rebase, force-push, or when the upstream tracks a base branch that has advanced)
- Fixed the dev3 CLI falsely reporting "app not running" inside sandboxed agents
- Fixed a flaky pty-server test by cancelling the deferred post-spawn configureTmux timer when a session is destroyed
Refactors
- Quick Shell (⇧⌘`) now spawns a fresh scratch task in the built-in Operations board on every press — like clicking "Scratch Task" — instead of reusing a singleton bare shell in the home directory
v1.26.0
GitHub ReleaseFeatures
- Added a virtual "Operations" board: a non-git, cross-project Kanban for ad-hoc, code-driven tasks (back up prod, stop a server, mail/Slack triage, throwaway experiments) that persist in history
Fixes
- Backend file logging now defaults to
infoon prod/staging/canary builds (fulldebugis kept on dev builds and can be forced anywhere withDEV3_LOG_LEVEL)
v1.25.1
GitHub ReleaseFeatures
- Added CI and PR-review status badges to task cards (CI passed/failed/running, review approved/changes-requested/commented), fetched by the existing background PR poller — which now keeps polling tasks in the PR Review column
v1.25.0
GitHub ReleaseFeatures
- Added CLI commands that let agents drive the app UI:
dev3 notifyshows a clickable in-app toast (or a native OS notification with--desktop) that jumps you to the originating task and carries the source-task context (#seq · project · title);dev3 attention "reason"lights the red task-card badge and shows the reason(s) in the card's hover preview — repeated calls accumulate (newest 5 kept), with no native browser tooltip; anddev3 ui statereports the focused task/project, app foreground, how long the user has been idle (so an agent can pick the right channel or hold off), and the worktree's tmux layout (windows, panes, an ASCII pane map;--jsonfor raw data) - The Cmd/Ctrl+K project quick-switch palette now lists the projects you jumped to most recently first, then the rest in board order
- On macOS, the whole worktrees root (~/.dev3.0/worktrees) is now automatically excluded from Time Machine backups once at app startup, sparing backups from gigabytes of CoW-cloned dependencies that already live in git
- Added a Google Analytics
agent_launchedevent fired once per agent instance started, carrying the agent name and the chosen permission mode, plus anagent_nameparameter on the existingtask_movedevent
Fixes
- Fixed the dev3 CLI intermittently reporting "app not running" while the desktop app was alive
- Fixed the task info panel briefly showing the previous task's branch/commit status when switching tasks
- Completing or cancelling a task no longer kicks you back to the bare Kanban board
v1.24.1
GitHub ReleaseFeatures
- The dev3 CLI now prints command- and subcommand-specific help
- Feature-discovery tips are now surface-aware and reach beyond the Kanban board
Fixes
- Active Tasks sidebar now mirrors the kanban board: tasks parked in a custom column (e.g
- Fixed a terminal selection that stayed glued to the screen while a full-screen TUI (Claude Code, vim, htop) repainted underneath it
v1.24.0
GitHub ReleaseFeatures
- Generalized the Vimium-style hint overlay into a cross-surface navigation primitive: pressing F (or the new ⌘G alias) now labels every task, project row, and sidebar task on screen — dashboard and task view included — and hint typing plus activation are matched on physical key codes, so they finally work on Cyrillic, Hebrew, and other non-Latin layouts
- Added Vimium-style task hint navigation to the board
- Added a "Tips & tricks" section to the marketing landing page: a curated grid of 12 hand-picked power-user tips, plus a collapsed "Show all" disclosure (closed by default) that reveals the full ~90-tip list
- Inline diff-review comments are now kept per task for up to 3 days, so they survive diff reloads, leaving the viewer, and app restarts — if an accidental clipboard clobber wipes your copied review, just reopen the diff and copy it again
Fixes
- Opening a task that is still cloning/setting up now shows a loading state (stage progress + Cancel) in the main task view instead of leaving the previously-active task's terminal on screen
- The "Unsaved Changes" confirmation shown when completing or cancelling a task with uncommitted changes now displays the task's title and overview in an info card, so you can tell which task's worktree and branch are about to be deleted
v1.23.1
GitHub ReleaseFeatures
- The git refresh button in a task now force-checks whether the branch is fully merged into its base
- Added a single source of truth for app-level keyboard shortcuts (src/mainview/keymap.ts) and a unified Keyboard Shortcuts overlay with two tabs (App + Terminal/tmux), opened via Help → Keyboard Shortcuts, the ⌘/ (Ctrl+/) shortcut, or the ⇧⌘P command palette
- Added "Go to Project… (⌘K)" and "Command Palette… (⇧⌘P)" entries to the top of the native View menu so the keyboard palettes are discoverable and clickable
- Added an "attention" mode to the Active Tasks sidebar
Fixes
- Fixed a leaked git worktree and tmux/PTY session that occurred when a conditional task move (--if-status / --if-status-not) was blocked: the guard is now evaluated before activateTask, so no worktree is created when the move is rejected
- Fixed a lost-update race in the CLI socket
label.deletehandler: it recomputed each task's labelIds from a stale snapshot taken outside the per-task lock, so a concurrent labelIds change (e.g - Fixed task cards landing at a stale mid-column position after moving between a builtin column and a custom column that share the same status (e.g
- Sped up opening the task diff for large changesets (180+ files no longer take 10s+)
- Made projects.json and tasks.json saves crash-safe by writing to a sibling temp file and renaming it over the final path
Refactors
- Audited the "Did you know?" tips: removed 10 low-value/duplicate tips, merged 15 redundant ones into their stronger siblings (120 → 95)
v1.23.0
GitHub ReleaseFeatures
- Added a Cmd/Ctrl+Shift+P command (action) palette — the action counterpart to the Cmd+K navigation palette
- Added syntax highlighting to the task diff viewer
- Added a VSCode/Linear-style project quick-switch palette: press Cmd/Ctrl+K, type part of a project name, and hit Enter to jump to the best fuzzy match (arrow keys to pick another)
- dev3 now inherits the full exported environment from your active login shell (bash or zsh) into agent and MCP sessions, instead of only a handful of whitelisted vars
Fixes
- Fixed labels selected in the New Task dialog being lost when the task was launched (Save & Start) — spawned variants and added attempts now inherit the source task's labels
- Fixed UI freezes (main-loop stalls) caused by a storm of git processes
Refactors
- Task search now uses the shared fzf-style fuzzy matcher (fuzzyMatch) for title and description instead of a naive substring check, so it behaves consistently with the project quick-switch palette
v1.22.0
GitHub ReleaseFeatures
- In the diff viewer you can now click a line number in the gutter and drag to select a range of lines, then leave a single inline review comment covering the whole range
dev3 task shownow always prints the task's current overview, and accepts--notesto inline note bodies and--historyto show the title/overview change log- Added browser-style back/forward navigation: two arrow buttons at the top-left of the global header, plus ⌘[ / ⌘] keyboard shortcuts and mouse side buttons
Fixes
- Completing or cancelling a task now reacts instantly on every surface (board drag, card status menu, info panel, detail modal, terminal toolbar): the card moves optimistically and the completion sound plays the moment you act, instead of waiting for the worktree-cleanup round-trip
v1.21.2
GitHub ReleaseFeatures
- Added two agent-CLI conveniences driven by platform vents
Fixes
- Fixed two UI-freeze classes
v1.21.1
GitHub ReleaseFeatures
- Added
dev3 conversations search "<query>"to search past task conversations (completed/cancelled) by scanning each task's surviving record — the agent transcript plus the task's own notes, overview, and title/overview history — and returning the top few most relevant tasks with snippets - Pasting a large text block (over 1 KB) into a task description, note, or the agent terminal now saves it as a .txt attachment in the worktree uploads dir and inserts its path, just like image paste — instead of dumping the raw text and bloating the task
- Tasks now keep an append-only history of their title and overview as they change over time, recorded automatically in the data layer (seeded at creation, updated whenever the displayed title or overview changes)
v1.21.0
GitHub ReleaseFeatures
- Active Tasks sidebar cards now show a compact status-age badge (25s / 5m / 7h / 13d / 7M / 3y) on the meta row, ticking live every second
Fixes
- Fixed flaky pty-server configureTmux timeout tests by replacing fixed two-microtask flushes with vi.waitFor polling, so assertions no longer depend on the exact async promise-chain depth under CI load
- Fixed the "Did you know?" tip card never rotating: the 60s rotation timer captured a stale (null) tipState in its closure, so it rescheduled forever and never marked tips seen
- Fixed the "Branch Merged — mark task completed?" popup never re-appearing when it was missed
- Fixed
dev3 tasks listto display the custom/agent-set title via getTaskTitle() instead of the raw auto-generated title, matchingtask showand the app UI - Prevent task creation from hanging indefinitely when fetching the remote base branch
Refactors
- Tightened horizontal spacing in the GlobalHeader action row (gap 6px→2px, button padding 8px→6px) to reclaim valuable top-bar space without shrinking hit targets
v1.20.0
GitHub ReleaseFeatures
- Added a background, local-only "vent" channel: agents run
dev3 vents "name" "markdown"to file anonymous feedback about the dev3 platform itself — both bug reports (something in dev3 got in the way) and feature requests (a missing dev3 capability that would have saved work) - Added Cmd/Ctrl+Shift+1..9 to switch to a project by index and land on the opposite view of the current one — from the Kanban board you get the project's task view, from a task view you get its board
- Added an Option+Tab task switcher: hold Option and tap Tab to flip through active tasks of the current project (Option+Shift+Tab spans all projects), release to jump
- AI agents can now request task completion via
dev3 task move --status completed
Fixes
- Follow-up to the dim-readability fix: instead of dropping the terminal dim attribute entirely (which made the input ghost/placeholder suggestion render like already-typed text), dim over the default foreground is now emulated as an explicit muted gray
- Fixed a file-lock race where two processes could both acquire the same lock for a brand-new project: the ENOENT recovery branch used a recursive mkdir on the lock dir itself, which silently swallows EEXIST
- Fixed tasks getting stuck in-progress with a misleading "[session ended]" terminal when worktree preparation fails (empty repo or missing base branch)
v1.19.2
GitHub ReleaseFixes
- Fixed unreadable muted text in Claude Code's select prompts on the dark theme
- Button labels are no longer selectable as text: a global
user-select: nonerule onbuttonelements prevents accidental text highlighting when dragging the mouse across toolbar and header controls
v1.19.1
GitHub ReleaseFeatures
- The header Git Pull button now quietly signals when the local main/master is behind origin: the icon gets a subtle accent tint and a tiny blue dot, and the tooltip shows how many new commits are available
Fixes
- Fixed the unreadable branch pill in Claude Code's status line on the dark theme
v1.19.0
GitHub ReleaseFeatures
- Typing "/" in the new-task description now opens an autocomplete dropdown with agent skills discovered in the global skill directories (~/.agents/skills, ~/.claude/skills, ~/.codex/skills)
Fixes
- Cut background CPU churn from polling: tasks.json/projects.json reads are now served from an mtime-validated cache (was ~6,400 full re-parses per hour), failing
git fetch origingets an exponential backoff instead of retrying every poller tick,detectDefaultCompareRef(git shortlog) is cached for 10 minutes, andgh auth status/gh auth tokenresults are cached instead of spawning three subprocesses per GitHub call - Fixed the dashboard showing an empty project list when one project's folder was deleted from disk — config resolution for a missing folder rejected the whole getProjects call
- Fixed several reliability issues in the "PR merged" completion popup: a prompt lost to an app restart was suppressed forever (now it re-appears after an hour if unanswered, while explicit dismissals stay permanent), tasks whose remote branch was pruned after merge (delete_branch_on_merge) were never detected (now verified via the GitHub merged-PR check), the popup could appear while uncommitted changes remained in the worktree, and it could fire when comparing against a non-base ref in the diff dropdown
- Replace
git fetch origin(full fetch) withgit fetch origin <branch>for all background and triggered fetches that only need the base branch ref
v1.18.6
GitHub ReleaseFixes
- Fixed unreadable terminal colors in both themes
- Fixed "Open in → Zed" so each worktree opens in its own Zed window instead of swapping the project in the single running window
v1.18.5
GitHub ReleaseFeatures
- Added the new Claude model Fable 5 (claude-fable-5) to the Claude agent presets and promoted it to the default launch model across all permission modes (Auto, Bypass, Default, Plan, Accept Edits, Don't Ask)
Fixes
- Fixed the dev3 CLI rejecting 8-char short project IDs (the form shown by
projects list) on the--projectflag
v1.18.4
GitHub ReleaseFeatures
- Active Tasks sidebar now color-codes every task by its status: a colored left rail plus a faint status wash on each card, and a tinted, color-barred group header
- The "Local Folder" tab in Add Project now opens the folder picker in multi-select mode, allowing users to select multiple git repositories at once and add them all as projects in a single step
Fixes
- Fix
dev3: command not foundin extra terminals opened inside a task for bash users - Fixed the diff view showing renamed files as a full delete + add (every line changed) instead of the few lines that actually differ
- Fixed a false-positive "Branch Merged" prompt on PR-review tasks, on two layers
- Scratch tasks no longer auto-fire a first message on Codex, Cursor, and OpenCode
v1.18.3
GitHub ReleaseFixes
- Fixed Codex agents failing to launch on newer codex (
error: unexpected argument '--profile-v2') - Fixed the dev3 skill overview instruction that led with a Russian example and explicitly forbade defaulting to English, which caused non-Russian users to occasionally get a Russian task overview
v1.18.2
GitHub ReleaseFixes
- Fixed the project name in the global header breadcrumb being unclickable on the activity/task view when no task was selected, so you can now return to the kanban board from there
- Cmd+1..9 project switching now respects the Task Open Mode setting
v1.18.1
GitHub ReleaseFeatures
- Cmd/Ctrl+1..9 project switching now preserves your current view mode
- Added a compact layout for narrow viewports (≤1600px, e.g
- Added a prominent "No Sleep" toggle to the global header (amber Awake state, coffee glyph)
Fixes
- Focus the app window before showing the quit-confirmation dialog
v1.18.0
GitHub ReleaseFeatures
- Made the Cloudflare quick tunnel the default for
dev3 remote— the headless server now starts a public trycloudflare.com URL out of the box and includes it in the QR - Added a "Create PR + auto-merge" button next to "Create PR" in the task git actions
- Added multi-window support
- Added per-port Cloudflare quick tunnels for dev servers
- Added a hide button to the Active Tasks sidebar header that collapses the split view into the full-page task terminal, mirroring the existing fullscreen/"Zoom" toggle in the task info panel
Fixes
- Fixed watched-task notification click-to-open: it now respects the user's task-open-mode preference (split by default instead of always forcing fullscreen zoom), and no longer fires on an unrelated in-app click
Refactors
- Replaced native dialogs for remote/browser mode
v1.17.2
GitHub ReleaseFixes
- Fix Codex 0.131+ launch failing with "config profile
dev3-darknot found"
v1.17.1
GitHub ReleaseFixes
- Fix the bug-hunter diff scope so it only looks at this branch's own changes
- Fixed the dev server Restart button: it now fully stops the running server, waits ~1s for ports and the inner tmux session to release, then starts fresh — instead of starting immediately and racing the dying process
Refactors
- Reworked the tmux pane controls toolbar: collapsed the five always-visible layout preset buttons into a single "tmux layout" split-button (one-click cycle + a dropdown menu listing each preset with its icon, label and keyboard shortcut, highlighting the last applied one)
v1.17.0
GitHub ReleaseFeatures
- Add an "Auto" option (now the default) to the diff layout setting
- Added Claude Opus 4.8 presets (model:
claude-opus-4-8[1m]) for every existing variant — Default, Plan, Bypass, Auto, Accept Edits, Don't Ask — and made them the new defaults - The "Create PR" button now sends a short instruction to the AI agent in the task's currently focused tmux pane, asking it to run
git pushand thengh pr create, instead of opening a separate git-op pane and browser - When a macOS task hangs on
fetching-originfor longer than 60 seconds, a small non-blocking popover now appears next to the stuck card explaining the most likely cause — Full Disk Access being silently revoked for git/tmux child processes — and offering a one-click deep-link to the macOS System Settings → Full Disk Access pane - Added a "Find bugs" lightbox triggered from the task header
- Added an "Include tests" toggle to both the diff viewer toolbar and the task info-panel top bar
Fixes
- Diff viewer no longer shows the misleading "No changes to show" empty state when every changed file is a test file and "Include tests" is off
- Fixed the diff toolbar "Showing N of M changed files" badge that could render with N > M when "Include tests" was off and the diff contained binary or oversized files
- Terminal preview popovers in the active tasks sidebar and on task cards no longer pop up while a drag-and-drop is in progress
- Fixed "Mark all read/unread" in the diff viewer to update read state for hidden test files too
- Strengthened the dev3 agent skill prompt so the session-start chores (branch rename, title, overview, labels) are no longer silently dropped when the user hands the agent a concrete task immediately
- Fixed task completion/cancellation sounds silently failing in packaged builds
- Fixed task titles freezing on whatever the first agent named them: the "user-edited — do NOT rename" lock used to fire on any non-null
customTitle, including agent renames throughdev3 task update --title - Fixed
DEV3_TASK_ID(and other per-task env vars) leaking between sibling tasks
v1.16.0
GitHub ReleaseFixes
- Fix Codex 0.131+ rejecting
--profile dev3-lightdue to legacy[profiles.dev3*]blocks in~/.codex/config.toml - Preserve the user-edited customTitle when the source task is replaced by spawnVariants (Save and Run) and when addAttempts creates new attempts
v1.15.2
GitHub ReleaseFixes
- Made dev3 detect the installed Codex CLI version before patching
~/.codex/config.toml, usinghooks/:workspace_rootsfor newer Codex andcodex_hooks/:project_rootsfor older versions - Fixed the merge-complete popup inside the full task view so confirming it immediately moves the task to completed while cleanup runs in the background, matching the existing manual complete flow
- The red "Close pane" button in the task tmux controls now only prompts for confirmation when you are about to close the *last* remaining pane — closing intermediate panes still happens instantly
v1.15.1
GitHub ReleaseFixes
- Fix reviving a task from completed/cancelled back to in-progress
v1.15.0
GitHub ReleaseFeatures
- Added an icon-only Scripts button (ƒ function glyph) in the task header — placed between Kill tmux and Dev Server — that opens a dropdown listing all package.json scripts in the worktree
Fixes
- Fixed agent CLIs (claude, codex, gemini, cursor) crashing with
error: unknown option '---…'when a task description starts with---(markdown frontmatter or horizontal rule) - Fix GitHub CLI auth detection on older
ghversions (e.g - Fix task titles being overwritten by the agent on session start when the user had manually renamed them via the UI
- Refuse to kill the last remaining tmux pane in a task session
- Unblocked the task lifecycle hot path by removing every sync spawn from PTY create/destroy:
destroySessionkills the tmux session via async spawn,configureTmux/setupTiledLayout/applyTmuxTheme/capturePane/tmuxSessionExists/splitAndRunCommand/listPaneIdsare now async, thewhich tmuxdiagnostic is fire-and-forget, theexistsSync(cwd)pre-flight is dropped, andrunCleanupScriptusesBun.file().exists()
v1.14.0
GitHub ReleaseFixes
- Auto-approve project-scoped MCP servers (
.mcp.json) in dev-3.0 managed Claude Code worktrees so users no longer face the "N new MCP servers found" prompt on every launch - Fix file ordering mismatch between the diff file tree (left panel) and the diff section list (right panel)
Refactors
- Redesigned the native macOS menu bar from 5 to 9 top-level menus (App, File, Edit, Task, Project, View, Terminal, Window, Help), exposing ~70 features that were previously hidden inside the renderer
v1.13.1
GitHub ReleaseFeatures
- Auto-exit tmux copy-mode in every pane of a task's session whenever the terminal becomes the visible view — entering a task from the dashboard, switching between tasks, or returning from the inline diff
- Clicking a watched-task notification now jumps straight into that task
Fixes
- Recover terminal edges that were reserved by stale workarounds
v1.13.0
GitHub ReleaseFeatures
- Added a collapse toggle to the inline diff review's files panel — on small screens the files sidebar was leaving very little room for the diff (especially in side-by-side mode), and the column couldn't be made smaller
- Empty Kanban columns shrink to a slim fixed strip (~35% of the standard width) on narrow viewports (<1400px), with the title truncated to fit
- Replaced the plain
alert()shown when the Kanban Git Pull button fails with a proper modal — same surface style as the Create Task dialog — that displays the full scrollable error text and offers Retry and Close buttons
Fixes
- Fix the "Branch merged → mark as completed?" popup so it navigates the user back to the Kanban view when they confirm from inside the full task screen
- Make the diff toolbar search-toggle button match the size of the other mode buttons (Branch / Uncommitted / Unpushed / Unified / Split)
- Removed outer parentheses around the config label on task cards
Refactors
- Tightened the Overview section in the dev3 agent skill to discourage long-form overviews
v1.12.4
GitHub ReleaseFixes
- The diff viewer now opens in Uncommitted mode by default (and remembers the last mode you picked via Branch / Uncommitted / Unpushed buttons), which fits the common "review-before-commit" workflow better than the previous Branch default
v1.12.3
GitHub ReleaseFeatures
- Confirm before discarding unsaved review notes in the diff viewer
Fixes
- Made the project name badge in the Active Tasks sidebar much more visible in global scope
v1.12.2
GitHub ReleaseFeatures
- Settings → Coding Agents now lets you reorder agents and configurations: each row has a drag handle plus ↑/↓ buttons so you can group items however you like (e.g
Fixes
- Deduplicate merge-completion prompts by persisting the last prompted task-branch fingerprint
- Shift+Enter handling in terminals now matches Enter by keyboard meaning instead of only physical key code, so the main Return key and numpad Enter both preserve the newline shortcut on extended keyboards
- When reviving a task from completed or cancelled, the agent used for the original session is now correctly restored
v1.12.1
GitHub ReleaseFixes
- Added PyCharm to the built-in Open In app list, kept incomplete custom External Apps rows visible while their debounced settings save filters them from persistence, and fixed file-level Open In menus closing before lower entries can be clicked
v1.12.0
GitHub ReleaseFixes
- Swap the Home Terminal and Project Terminal buttons in the global header so Home Terminal appears first and Project Terminal sits to its right
- Fixed terminal clipboard handling for long drag selections, including Home Terminal selections that scroll beyond one screen
v1.11.3
GitHub ReleaseFeatures
- Add Home Terminal — a project-free 2×2 tmux grid that opens in the user's home directory
Fixes
- Cmd+N now opens the same New Task dialog everywhere (with Scratch + Save & Start buttons), regardless of whether the user is on the Kanban board or inside a task
v1.11.2
GitHub ReleaseFeatures
- Dashboard projects can now be reordered and the saved order drives Cmd+1 through Cmd+9 project switching
- Added
--port <n>todev3 remote(envDEV3_REMOTE_PORT) so the listen port can be pinned instead of randomised — useful for Docker-pmappings and SSH-Lforwards
v1.11.1
GitHub ReleaseFixes
- Update Claude Code Sonnet presets to use the current
sonnetmodel alias instead of the deprecated timed Sonnet alias - Inline the full dev3 skill body directly into the agent's system prompt instead of asking the agent to invoke
/dev3first
v1.11.0
GitHub ReleaseFixes
- Fix tmux selection-to-clipboard regression introduced by PR #473
- Fixed git fetch failing silently in repos that use SSH authentication (e.g., git@github.com: remotes)
v1.10.3
GitHub ReleaseFixes
- Fixed CLI socket request parsing so large
dev3 task create/update --description @file.mdpayloads are buffered across socket chunks instead of failing with a misleadingInvalid JSON
v1.10.2
GitHub ReleaseFeatures
- AI Review now hands the task back to the user automatically
- Added **Scratch Task** button to the New Task modal
Fixes
- Fixed task ordering so custom columns keep independent columnOrder values even when they share the same built-in status
- Refresh the inline diff viewer when the same diff request is opened again, and include full file content in read-state and render cache keys so repeated commits cannot reuse stale UI state for changed files
v1.10.1
GitHub ReleaseNotes for this release are on its GitHub Release page.
v1.10.0
GitHub ReleaseFeatures
- The selected task in the Active Tasks sidebar now shows its overview directly inside its card (below the title, only when an overview is set), so you no longer need to hover to recall context
- Command+N now opens the New Task dialog from any project screen, including full task views, and File now includes a matching New Task item
- Add a "New" tab to Add Project that initialises a brand-new project from scratch: user picks (or creates) an empty folder in the custom picker and dev-3.0 runs git init, seeds a .dev3/README.md placeholder, and makes the first "init" commit automatically
- Add a slider switch to the Active Tasks sidebar header that toggles between project-only and global scope
- Added first-class Task Overview — a short one-paragraph summary surfaced above the terminal snapshot in the hover-preview popover, with inline editing and a new
dev3 overview set|show|clearCLI - Added a Git Pull button to the global header, right after Project Terminal (visible whenever a project is open, not only on the Kanban board)
- Added hourly pre-save backups for each project's
tasks.jsonunder a newtasks-backups/directory in~/.dev3.0/data/<slug>/
Fixes
- Restore merge-completion prompts for Has Questions, Your Review, and PR Review
- Fixed PR review branch fetching for fork remotes by storing fetched fork branches as remote-tracking refs, so they appear in the Create Task branch picker
- Added terminal copy diagnostics that log selection-driven clipboard attempts,
navigator.clipboard.writeTextfailures,execCommand("copy")fallback usage, and mouse-tracking interference into the app log - Fixed the garbled/overlapping terminal content and the flicker that appeared when switching between tasks
- Inline Git Diff now opens its own local search with Cmd+F instead of falling through to board/task search or doing nothing
v1.9.2
GitHub ReleaseFixes
- Detect the user's real account shell from system user records instead of trusting a stale
SHELLenvironment variable
v1.9.1
GitHub ReleaseFixes
- Import
GH_CONFIG_DIRandXDG_CONFIG_HOMEfrom the user's login shell during app startup so backendghauth checks use the same config directory as interactive terminals - Made the top changed-files badge in the task header open the same inline branch diff as the
Show Diffbutton
v1.9.0
GitHub ReleaseFeatures
- Show binary and oversized files in the task diff viewer instead of hiding them
- Added a GitHub-style copy-path icon next to each filename in the inline Git Diff viewer so reviewers can copy full worktree file paths without leaving the diff
- Replaced the native folder dialog with a custom in-app folder picker so it works in both desktop and remote (browser) modes
Fixes
- Fixed duplicate project entries in the renderer state when the same repository is added more than once
- Revert the dash-escape projectSlug change and its one-shot data directory migration from PR #486
- Fix stale content in the inline diff viewer after a branch rebase or fresh refetch
- Fix dev-server start failing with "No dev script configured" when a new project keeps its
.dev3/config.jsononly in a feature-branch worktree (not yet merged to the main branch) - Fix five medium bugs in task lifecycle and CLI: disambiguate projectSlug so paths like
/foo/bar-bazand/foo-bar/bazno longer collide on disk (one-shot migration renames existing data dirs), maketask update --description ""clear a task's description via tri-state parsing, surface a user-facing alert when a custom-column agent fails to launch (previously silent), prevent ProjectSettings from persisting a stale worktree config into a different worktree after getProjectConfigs fails (form is cleared and Save is disabled until load succeeds), and document the intentional description blanking in activateTask on reopen - Fixed five reliability regressions across the renderer, RPC transport, shell bootstrap, and release workflow
v1.8.2
GitHub ReleaseNotes for this release are on its GitHub Release page.
v1.8.1
GitHub ReleaseFixes
- Moved OSC 52 clipboard handling from the PTY server to the renderer by forwarding decoded payloads over RPC and writing them with navigator.clipboard on the client
- Dropped files now upload their content into the task worktree uploads directory and use the returned server path instead of trying to resolve a host-system filename
- Persist the resolved UI theme and the selected theme preference when tmux theme changes, then inject that state into remote HTML bootstrap
- New tasks created from an existing branch now store that source branch as their task base branch, so Task compare, rebase, and PR defaults follow the branch they were spawned from instead of the project default
v1.8.0
GitHub ReleaseFeatures
- Added
dev3 remote— run dev-3.0 headless and serve the full React UI to any browser over HTTP + WebSocket
Fixes
- Fixed the macOS release signing flow so both bundled CLI binaries,
dev3anddev3-server, are signed with the Developer ID certificate before notarization
v1.7.3
GitHub ReleaseFeatures
- Task creation now keeps the current non-base branch visible in the branch picker so users can see what context they are about to inherit
Fixes
- Routed destructive CLI socket
task.movetransitions through the shared task lifecycle handler so task state cleanup, port release, and dev-server teardown stay aligned with the canonical RPC path - Prevented
addProject/updateProjectand task mutators from overwriting persisted state after a JSON parse failure inprojects.jsonortasks.json - Declared the desktop-only RPC message ids for zoom controls and QR token consumption in the shared Electrobun schema
- Stopped
loadProjects()andloadTasks()from writing schema backfills during unlocked reads, and limited migration persistence to locked mutators - Improved the release artifact recovery script so macOS CI failures that leave only
dev-3.0.app.zipnow report a likely post-packaging/notarization failure instead of the misleading "build failed before tarring" message
v1.7.1
GitHub ReleaseFixes
- Fixed notes/labels read-modify-write races by moving project and task mutations under locked mutator APIs in
src/bun/data.tsand updatingsrc/bun/rpc-handlers/notes-labels.tsto use them - Hardened global settings persistence with a file lock, parent directory creation, and atomic temp-file rename to prevent corrupted
settings.jsonwrites
v1.7.0
GitHub ReleaseFeatures
- Added a managed
dev3-bug-hunterskill that installs for all supported agents and gives each bug-hunting run a seeded starting area plus analysis style
Fixes
- Moved
task move --if-status/--if-status-notcompare-and-set checks intodata.updateTask()so the guard now runs under the per-task file lock - Preparing tasks now emit step-by-step timing logs for project config resolution, worktree creation, sparse checkout, clone-path reuse, PTY launch, and key git substeps so slow or stuck setup leaves a usable performance trail
v1.6.4
GitHub ReleaseFixes
- Fixed a race in Global Settings agent config editing where overlapping save requests could persist an older payload after a newer one
- Applied a WKWebView-specific inline diff workaround so split/unified views do not visually drift into fake rows after mode switches or horizontal scrolling
v1.6.3
GitHub ReleaseFeatures
- Cleanup Script now runs as a teardown hook for completed and cancelled tasks with lifecycle env vars such as DEV3_TASK_STATUS, DEV3_TASK_FROM_STATUS, DEV3_TASK_TO_STATUS, DEV3_PROJECT_PATH, and DEV3_WORKTREE_PATH
Fixes
- Make generated Codex lifecycle hooks treat
dev3exit code 2 ("app not running") as a non-blocking no-op, so prompt submission, Bash tool execution, and Stop still work when the desktop app is closed - Preparing task cards now keep a dedicated "Show full description" recovery action in the loading overlay, so the original task text stays reachable even if preparation hangs
- Fixed Git-backed filename handling so Unicode and Cyrillic paths stay readable in branch diff stats and untracked file scans instead of showing escaped octal sequences
- Fix the inline review diff viewer to rely on the library's own horizontal scroll container instead of wrapping it in a second overflow layer
v1.6.2
GitHub ReleaseFixes
- Make Codex Stop hooks return an explicit
{}success envelope instead of relying on empty stdout, and wrap the generated hook command so normal CLI output cannot leak into Codex's JSON parser
v1.6.1
GitHub ReleaseFeatures
- Closed tmux panes are now automatically removed from session recovery state via a tmux pane-exited hook
- Add
dev3 dev-server start|stop|restart|statusso the CLI can control the same task dev server flow as the UI button - Agent sessions now survive app restarts, tmux crashes, and quit/relaunch cycles
Fixes
- Rebuilt task completion and cancellation sounds around renderer-side playback instead of Bun shelling out to
afplay - Made generated Codex Stop hooks call
dev3 task movewith a Codex-specific flag that suppresses human-readable stdout, so Codex no longer rejects the hook output as invalid JSON - Add the macOS microphone entitlement to the Electrobun build config so dev-3.0 can request microphone access for AI assistant voice mode
- Dev3 now manages dedicated Codex config profiles for themed launches instead of passing one-off
tui.themeCLI overrides
v1.6.0
GitHub ReleaseFeatures
- Active Tasks now shows each parallel variant by agent and compact config summary instead of relying on duplicated task titles alone
Fixes
- Stop installing managed
dev3anddev3-project-configskills into~/.gemini/skillsnow that Gemini CLI already loads the shared~/.agents/skillsalias first
Refactors
- Refactored Global Settings into domain-specific section components with a shared persistence flow for global setting updates
v1.5.2
GitHub ReleaseFixes
- Fixed PATH resolution for binary lookups (tmux, gh, git)
- Fix terminal rendering corruption when a dev server pane closes inside a nested tmux session
v1.5.1
GitHub ReleaseFeatures
- Added inline comments to the built-in diff viewer using
@git-diff-view/reactwidgets for comment composers and extend data for rendered threads - Added a project-scoped GitHub integration layer for
gh: the app now detects installed/authenticated accounts, lets you choose a per-project GitHub account in Project Settings, and runs PR discovery/actions through that account instead of relying on whicheverghuser happens to be active globally
v1.5.0
GitHub ReleaseFeatures
- Added an inline git diff mode that replaces the task terminal with an in-app diff viewer
- Replaced text-only launcher names in task variant badges with @lobehub/icons logos for known agents while keeping a text fallback for unknown launchers
Fixes
- Moved the PR badge off the crowded footer row and into the lower action row of active task cards, with centered badge text and spacing
- Normalize the tmux toolbar spacing so the shortcuts hint button matches the surrounding controls and no longer leaves an extra gap before close pane
- Made the worktree copy tooltip explicit so it now says it copies the path to the git worktree
v1.4.4
GitHub ReleaseFeatures
- Expanded the generated dev3 skill so agents assign 1-2 meaningful task labels during the same session-start metadata pass as branch renaming and task title cleanup
Fixes
- Fix Codex startup failures caused by dev3-managed
config.tomlfiles that defined permission profiles withoutdefault_permissions - Reduced
listTmuxSessionsoverhead by listing tmux sessions before loading project/task metadata, skipping task loads for project-terminal-only results, and downgrading routine session logs to debug
Refactors
- Refactored TaskInfoPanel into focused task-info-panel modules for git actions, dev server controls, notes, open-in actions, tmux controls, and task-specific polling hooks
- Refactored Bun RPC handlers out of the monolithic
src/bun/rpc-handlers.tsfile into domain modules for app/project, settings/config, task lifecycle, git operations, tmux/PTY, notes/labels, and remote access
v1.4.3
GitHub ReleaseFixes
- Restore active task terminals in resume mode after app relaunch by treating persisted worktree-backed tasks as already launched sessions
- Fixed a background preparation failure path where
spawnVariantsandaddAttemptscould reject before entering per-task error handling, leaving tasks stuck inPreparing...
v1.4.2
GitHub ReleaseFixes
- Fix Codex spawned worktrees asking for the trust prompt again by pre-registering the exact worktree path in
~/.codex/config.tomlbefore launch - Task completion and cancellation sounds now play immediately when the status change is accepted instead of waiting for tmux cleanup and worktree teardown
- Stop posting or updating the Trivy PR comment when the scan report is clean
v1.4.1
GitHub ReleaseFeatures
- Moved the dashboard to a single Activity-based project list: it now shows all projects, keeps project paths visible, includes Add Project in the Activity header, and no longer depends on the old Projects tab
Fixes
- Fixed task description, notes, and terminal image drag-and-drop to upload the dropped file directly instead of relying on Spotlight path resolution
v1.4.0
GitHub ReleaseFeatures
- Added a configurable setup startup order so projects can wait for
Setup Scriptto finish before the initial agent prompt starts - Codex tasks now install worktree-local dev3 hooks and enable the
codex_hooksfeature automatically, soin-progressand review transitions work like Claude without relying only on manual skill instructions
Fixes
- Fixed
dev3 currentso it shows the effective task title, includingcustomTitleoverrides set bydev3 task update --title
v1.3.3
GitHub ReleaseFeatures
- Added Oh My OpenCode as a built-in agent with 12 presets covering Sisyphus (orchestrator), Prometheus (planner), Atlas (executor), Hephaestus (deep worker) agents, plus simple model-only presets for Haiku 4.5, GPT-5.4 Mini, and Big Pickle (free)
v1.3.2
GitHub ReleaseFixes
- Fix Shift+Enter not inserting newline in Claude Code 2.1.82+
v1.3.1
GitHub ReleaseFeatures
- Add a global "Default Diff Tool" setting in Global Settings
Fixes
- Fixed ExtraKeyBar (Esc, Ctrl, Tab, Enter, arrow buttons) showing on desktop browsers in remote/web mode
v1.3.0
GitHub ReleaseFeatures
- Added a copy-to-clipboard button for the worktree path in three places: a folder+clipboard icon in the collapsed task header bar (next to branch name), a clipboard icon next to the worktree path in the expanded info panel, and a "Copy Path" item in the right-click context menu on task cards
- Added a global "Prevent Sleep" setting that keeps your system awake while agents are running
- Add IntelliJ IDEA Ultimate to the "Open in..." menu
- Add browser-mode RPC transport with JWT authentication and optional Cloudflare Tunnel support
Fixes
- Fix three bugs in the browser WebSocket RPC transport: (1)
trySendretry loop now stops when a request times out or is resolved, preventing indefinite timer accumulation; (2) WebSocket no longer attempts to reconnect when the session token is absent (auth failure), stopping an infinite 401 reconnect loop; (3)uploadImageBase64RPC method is now declared inAppRPCSchemaso TypeScript can type-check callers - Fixed Clone Paths (CoW) not being copied into worktrees
v1.2.0
GitHub ReleaseFeatures
- Improved project terminal UX: added Cmd+` keyboard shortcut to toggle the terminal from any project screen, a visible "Terminal" button in the header actions area (with active state highlight), and a "Back to Board" toolbar at the top of the terminal screen
- Added per-task watch with macOS notifications
- Redesigned the tmux pane control bar with custom SVG icons and expanded it from 4 to 10 buttons
- Display aggregated CPU and memory (RSS) usage for each active tmux session
- Added per-task port allocation
Fixes
- Kanban column header icons (rename, info, count, collapse) are now always visible instead of only appearing on hover
- Dashboard tab preference now uses sessionStorage instead of localStorage, so the Activity tab is always shown by default when the app starts
- Fix swapped layout buttons: the "even horizontal" icon (rows) was sending tmux
even-horizontal(columns) and vice versa - Fixed orphaned tmux sessions showing a raw
dev3-XXXXXXXXname with no title or navigation in the tmux session manager - Moved the watch toggle for non-active task cards (todo, completed, cancelled) into the labels row instead of a separate row
- Fix project terminal sessions in the tmux session popover not responding to clicks
v1.1.2
GitHub ReleaseFeatures
- Add tmux theme switching with Catppuccin palettes
Fixes
- Fixed AI review agent launching without a prompt when builtinColumnAgents config has empty prompt field
- Auto-update download retry now uses exponential backoff (500ms to 30s) instead of a single 1-second retry, giving Electrobun more time to finalize the update state
- Fixed project terminal split panes opening in the wrong directory
v1.1.1
GitHub ReleaseFeatures
- Add project-level terminal: a persistent shell session rooted at the project's git directory, accessible from the Kanban board toolbar and Dashboard project cards
Fixes
- Fixed the broken AI Review project setting so turning it off is now saved correctly in repo config and local overrides instead of silently reopening as enabled and continuing to auto-review tasks
- Fix unhandled RPC timeout rejections with enriched error context
- Fixed tmux session list showing stale task titles after rename
v1.1.0
GitHub ReleaseFeatures
- Projects can now store a default diff comparison target in
.dev3/config.jsonor.dev3/config.local.json, so branch status, rebase, and Show Diff start from the preferred remote or local base branch automatically
Fixes
- Reduce terminal flickering when viewing running tasks by adding PTY data batching (~60fps instead of per-byte forwarding), terminal write batching via requestAnimationFrame on the renderer side, improved reconnection (clear screen before injecting captured pane), and optimized tmux config with synchronized output (DEC 2026), extended keys, focus events, RGB terminal overrides, and 250k scrollback buffer
- Fixed title editing for ToDo tasks in the task detail modal
v1.0.3
GitHub ReleaseFeatures
- Agent binary detection: the app now checks whether each agent CLI (Claude, Codex, Gemini, Cursor Agent) is installed and shows the status in Global Settings with green/red badges
Fixes
- Fixed setup script not running when tasks are launched via spawnVariants or addAttempts
- Removed hardcoded task IDs from Claude Code hook commands
Refactors
- Refactored project configuration into a clean 4-level hierarchy: worktree local (.dev3/config.local.json) > worktree repo (.dev3/config.json) > app-level (~/.dev3.0/data/<slug>/config.json) > projects.json > defaults
v1.0.2
GitHub ReleaseFeatures
- When Claude Code hooks are installed in a worktree, the
Bash(dev3:*)permission is now automatically added to.claude/settings.local.json
v1.0.1
GitHub ReleaseFeatures
- Users can now rename standard board columns (To Do, Agent is Working, Your Review, etc.) to match their workflow terminology
- Added ability to create new attempts for already running tasks
Fixes
- Fixed UserPromptSubmit/PreToolUse hooks not moving tasks from "Your Review" back to "Agent is Working" when the user leaves feedback and the agent resumes
- Fixed port detection not finding ports opened by dev server sessions
- Fixed "Has Questions" (user-questions) status appearing at the bottom of the pipeline dropdown instead of its correct position after "Agent is Working"
v1.0.0
GitHub ReleaseFeatures
- Generalized AI Review into Column Agents — any Kanban column (built-in or custom) can now auto-spawn an agent with a configurable prompt when a task enters it
- Implement the AI Review stage in the task lifecycle
Fixes
- Changed the built-in Codex default preset to GPT-5.4 Heavy Bypass and bumped its preset version so existing stored default configs pick up the new sandbox arguments automatically
- Fixed task info panel and task card showing the built-in status instead of the custom column name when a task is in a custom column
v0.11.2
GitHub ReleaseFixes
- Fixed a race condition in the auto-updater where the app would notify the user that an update was ready to apply, but Electrobun's internal
updateReadyflag hadn't been set yet
v0.11.1
GitHub ReleaseFeatures
- The silent update toast now shows a 5-minute (300s) countdown
- Added iTerm2 compatibility toggle to the tmux shortcuts popover (the ⓘ info button in the task panel header)
- Project settings (setup/dev/cleanup scripts, clone paths, base branch, peer review toggle) now live exclusively in
.dev3/config.json(shared, committed to git) and.dev3/config.local.json(personal, git-ignored)
Fixes
- The Todo column is now expanded by default on the Kanban board
v0.11.0
GitHub ReleaseFeatures
- Added Worktree File Filter in Project Settings
- Kanban columns for todo, completed, and cancelled are now collapsible and collapsed by default, freeing horizontal space for active work columns
v0.10.4
GitHub ReleaseFeatures
- Task launch is now non-blocking: clicking "Launch" closes the modal immediately and shows the task card with a preparing spinner
- Add Gemini CLI auto-trust and configuration presets
Fixes
- Make the bundled tmux config use String.raw so the backslash split binding is emitted as a literal
bind \\ split-window ...line
v0.10.3
GitHub ReleaseFeatures
- Added a "Spawn Agent" button in the task info panel that opens a modal to select an agent and configuration, then spawns it in a new vertical tmux pane within the same task session
Fixes
- Adjusted the task card footer layout so PR badges and other actions wrap instead of forcing horizontal board scroll
v0.10.2
GitHub ReleaseFixes
- Removed the side-branch badge overlay from the compact status pipeline so the mini pipeline only shows stage dots
- Added version-based preset update mechanism for agent configurations
v0.10.1
GitHub ReleaseFeatures
- When an AI agent exits (e.g
- Add search/filter capability to the task sidebar (left panel) and the Kanban board
Fixes
- Rewrite Codex sandbox integration with dedicated
[permissions.dev3]and[profiles.dev3]profiles using absolute paths
v0.10.0
GitHub ReleaseFeatures
- Added inline task rename in two places: the TaskInfoPanel metadata grid and the GlobalHeader breadcrumb
- Added "Plan then Bypass" agent configurations for Claude (Opus and Sonnet), Cursor (Opus 4.6), and Codex (GPT-5.4)
- Task cards on the Kanban board now display a clickable PR badge (e.g
- Added a "Did you know?" tip explaining that users can restart a task from scratch by moving it to Cancelled and then back to Todo, which spawns a fresh worktree and agent session
Fixes
- Fixed changelog date groups appearing out of order
- Dashboard now remembers the active tab (Activity/Projects) in localStorage
- Fixed binary files (images, etc.) being counted in uncommitted diff line statistics
- Branch selector now finds fork branches when using GitHub's colon notation (e.g., "user:feat/branch")
- Fix 6 memory leaks: add size guard and cleanup on status transitions for prPromotedTasks Set, add 5-minute TTL to useAvailableApps cache, export destroyAnalytics() for heartbeat interval cleanup, add removeFetchCache() to prune stale fetchLastSuccess entries on project deletion, cap git log -p with --max-count=500 in merge detection, and pre-check diff size via --shortstat before buffering full output in saveDiffSnapshot
- Fixed 8 memory leaks across the codebase: added mounted/cancelled checks for React components (KanbanBoard tip rotation, TaskTerminal async IIFE, useImagePaste hook, GlobalSettings timer), added socket.destroy() in CLI error handler to prevent fd leaks, eliminated double file reads in getUncommittedChanges, wrapped monitorGitPane interval in try-catch for safe cleanup, and added TTL-based eviction for stale pane ID map entries
- Fix 5 memory-related issues: add LRU eviction to ImageLightbox data URL cache (max 30 entries), add stop functions for merge/PR detection pollers to prevent interval stacking, await fire-and-forget tmux spawn calls to prevent zombie processes, and add periodic sweep to clean stale entries from mergeNotifiedTasks/prPromotedTasks Sets
- Remove the full worktree path from the tmux status bar to reduce clutter
v0.9.1
GitHub ReleaseFeatures
- Kanban columns now show only the 15 most recent tasks by default
- Different sounds now play for completed vs cancelled tasks
- Support fetching branches from GitHub forks in the branch selector
- Replaced the flat status dropdown with a vertical pipeline visualization showing task progress through stages (Todo → Working → AI Review → Your Review → PR Review → Completed)
- The "Create PR" button in the task info panel now detects when a branch already has an open PR on GitHub
Fixes
- Temporarily disable Codex sandbox via
--sandbox neverflag on all Codex configurations to work around a breaking change in Codex 0.114+ where[permissions]requiresdefault_permissions - Add ~/.local/bin and ~/bin as fallback PATH directories
- Fixed the pipeline status indicator for cancelled tasks
- Fixed split view divider double-click reset by adding a drag threshold so tiny mouse movements during a double-click no longer start a drag
v0.9.0
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.8.6
GitHub ReleaseFeatures
- When creating a new task, if the project's main worktree is on a non-base branch, the branch selector now auto-fills with that branch
- Added a global preference for how active tasks open when clicked
- Added startup check for GitHub CLI (gh) availability
- When clicking the Dev Server button while a dev server is already running, the app now shows a dropdown menu with Restart and Stop options
Fixes
- Improved Create Task modal UX: ESC key now properly closes the modal without navigating away, replaced Cancel button with a standard X close button in the top corner, and clicking the backdrop dismisses the dialog (with a discard confirmation if the form has unsaved input)
- Custom columns defined in Project Settings now appear in all "Move to" status dropdowns (task card, task info panel, and task detail modal)
v0.8.5
GitHub ReleaseFeatures
- Add "Did you know?" tip cards to the Kanban board for feature discovery
- Reworked the built-in Codex presets around the actual dev workflow: a planner profile, full-auto worker profiles, and a separate GPT-5.4 heavy profile that keeps confirmations enabled, all with
--searchenabled and--no-alt-screenfor tmux-friendly inline output - Add mobile device detection and dynamic viewport switching
- Added
dev3 install-skillsCLI command that installs agent skills globally (Claude, Cursor, Codex, Gemini, OpenCode), updates ~/.agents/AGENTS.md, Claude permissions, and Codex config - Detect and display listening TCP ports for each task's tmux session
Fixes
- Fix worktree creation crash when base branch does not exist (e.g., repo with no remote or misconfigured default branch)
- Branch naming convention changed from hardcoded
dev3/prefix to standard type prefixes (feat/,fix/,chore/,refactor/,docs/) - Fix changelog showing "No changelog entries yet" in production builds
- Add --if-status-not CLI flag with comma-separated support for task move guards
- Improved custom column UX in project settings: the column name field now has a visible border and background so it looks like an actual input, and both fields ("Column name" and "LLM instruction") now have clear labels above them
- Fixed the Full Page toggle button in TaskInfoPanel so it acts as a proper toggle — when already in full-page mode, clicking the button now navigates back to the split project view instead of being a dead end
- Set the tmux split pane for git operations (rebase, push, merge, create PR, diff) to 20% height instead of the default 50/50 split
- Fix race condition causing "Terminal has been destroyed" and "Out of bounds memory access" errors in TerminalView
- Show visible progress indicator during app upgrade
v0.8.4
GitHub ReleaseFixes
- When creating a task from a branch that is already checked out in another worktree, the fallback task branch now automatically sets up remote tracking to the original branch's remote counterpart (if it exists)
- Fix duplicate green colors in Kanban board columns
- Fix bottom row clipping (e.g
- Worktrees now start from the latest
origin/<baseBranch>instead of the potentially stale local branch
v0.8.3
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.8.2
GitHub ReleaseFixes
- Fix task creation failing silently for new projects
Refactors
- Renamed Kanban column labels for clarity: "Waiting for You" → "Has Questions", "Review by AI" → "AI Review", "Review by You" → "Your Review", "External Review" → "PR Review"
v0.8.1
GitHub ReleaseFeatures
- Add PreToolUse hook to auto-approve safe Bash and Read operations
- Changelog entries now show community contributor credit when a feature or fix originated from a GitHub issue
- Double-clicking empty space in the Todo column now opens the Create Task modal
- Added IntelliJ IDEA, IntelliJ IDEA CE, Zed, and Sublime Text to the default list of external apps in the "Open in..." context menu, each with a distinctive Nerd Font icon
- Added a new built-in "External Review" column (status:
review-by-colleague) that sits between "Review by You" and the terminal columns - Clicking a tmux session row in the TmuxSessionManager popover now navigates to the corresponding task
Fixes
- Fix creating a task from an existing branch that is already checked out in another worktree
- Fixed
task createCLI command ignoring positional content from@filesyntax - Fix unhandled promise rejections and uncaught errors in the renderer that were flooding Google Analytics with ~8.4K app_exception events
v0.8.0
GitHub ReleaseFeatures
- Add automatic Claude Code hooks (PreToolUse, PermissionRequest, Stop) to dev-3.0 worktrees for reliable task status transitions
- Save periodic diff snapshots per task for recovery purposes
- Added terminal hover preview to the ActiveTasksSidebar
Fixes
- Fix missing dropPosition option when resuming completed/cancelled tasks into custom columns
- Pressing Escape on a project's Kanban board now navigates back to the main app dashboard, consistent with other screens
Refactors
- Replaced the three-option terminal keymap selector (Convenient / iTerm2 / Native tmux) with a single iTerm2 compatibility toggle
v0.7.7
GitHub ReleaseFeatures
- Added a dropdown to the project name in the breadcrumb bar for quick project switching
- Add "Open in..." context menu for worktrees
Fixes
- Fix Cmd+H not hiding the app on macOS
- Fixed terminal preview popover not closing when drag-and-drop starts on a task card in Kanban view
- Fix update dropdown in GlobalHeader being overlapped by Kanban columns
v0.7.6
GitHub ReleaseFeatures
- Show branch diff stats (files changed, lines added/removed) on the first row of the task info panel, next to the status badge
- Enhanced Google Analytics 4 integration with full-featured tracking: added
first_openevent for new user detection,user_agentfield for automatic OS/country/device resolution in GA4 standard reports,app_updateevent on version changes,app_exceptionfor global error tracking,screen_resolutionandlanguageuser properties, project lifecycle events (project_added,project_removed), settings change events (theme_changed,locale_changed,settings_changed), and session duration in heartbeat - Added custom columns to the Kanban board
Fixes
- Fix ambiguous ID prefix matching in CLI socket handlers
- Add a guard flag to
setupErrorTracking()in analytics to prevent duplicate window error/unhandledrejection listeners from accumulating wheninitAnalytics()is called multiple times (e.g - Fix critical memory leak caused by three compounding issues: (1) Logger
appendToFile()read the entire log file and rewrote it for every single line — O(n²) memory allocation that reached ~44MB/sec at peak logging rates - Fix "Review by AI" column appearing at position 4 instead of the far right
- Deduplicate projectSlug() (data.ts now imports from git.ts), cache terminal keymap preset to avoid localStorage reads on every keydown, fix TOCTOU in playTaskCompleteSound(), clean up in-memory pane/merge tracking state on task deletion and completion, fix wrong useCallback dependency in RequirementsCheck
- Fix tmux sessions leaking after task completion/cancellation
Refactors
- Extracted shared
activateTask()helper in rpc-handlers.ts to deduplicate worktree creation + CoW clones + PTY launch logic
v0.7.5
GitHub ReleaseFixes
- Fix unreliable diffs against main branch (#141)
- Fix race condition where creating a new task briefly shows duplicate cards
v0.7.4
GitHub ReleaseFeatures
- Background merge detection: the app now polls every 60 seconds and checks if tasks in "Review by You" status have their branch changes fully merged into the base branch
- Task cards now grey out instantly when moved to completed/cancelled status
- Replace intrusive update popup with silent background download and non-intrusive UI indicator
- Replace the
say "task finished"default cleanup script withecho "Task finished" - Add yazi file browser integration
Fixes
- Clear the bell badge (red notification dot) when a task is moved to completed or cancelled status
- Add file-level locking (mkdir-based atomic lock) to all JSON read-modify-write operations in the data layer
- Fix default branch detection when adding a project
- Suppress native macOS context menu in the terminal area by adding
preventDefault()on thecontextmenuevent
v0.7.3
GitHub ReleaseFeatures
- Changelog dialog now sorts entries by type within each date group (features first, then fixes, then the rest)
- Added "This is a PR review" toggle in the Create Task modal
- Add configurable terminal keymap presets: "Convenient" (Cmd+W kills pane), "iTerm2" (Cmd+W/D/Shift+D/T/[/]), and "Native tmux" (no shortcuts)
Fixes
- Fix restart terminal to use resume command with correct agent
- Pressing Escape when the discard confirmation is visible in CreateTaskModal now dismisses the confirmation (keep editing) instead of re-triggering it
v0.7.2
GitHub ReleaseFixes
- Fix tmux not being detected on fresh installs where Homebrew PATH is not in the app's environment
v0.7.1
GitHub ReleaseFeatures
- Added Google Analytics (gtag.js) to the GitHub Pages landing page using the same GA4 measurement ID as the desktop app
- Redesign light theme to premium quality
v0.7.0
GitHub ReleaseFeatures
- Add Active Tasks sidebar for split terminal view
- Auto-allow dev3 CLI commands in Claude Code
- Replace disabled "Create PR" button with an active "Push & Create PR" button when the branch has unpushed commits
- Renamed "In Progress" column to "Agent is Working" and "User Questions" to "Waiting for You" across all three locales (en, ru, es)
- The "Restart Terminal" button shown when a tmux session dies (but the worktree is intact) now launches the agent with the resume flag (
claude --continue,codex resume --last, etc.) and is renamed to "Resume Agent Session"
Fixes
- Prevent opening a task card (navigation or detail modal) while it is being moved to completed/cancelled
- Fixed drag-and-drop of multiple images only attaching 1-2 files instead of all
- Prevent duplicate project creation when the same folder path is added multiple times
- Limit mdfind search scope to common user directories (Desktop, Downloads, Documents, etc.) instead of scanning the entire filesystem, reducing unwanted macOS TCC permission prompts for protected folders like Music and Photos
- Fixed a bug where
dev3 task create --title "..." --description @filewould silently discard the description
v0.6.6
GitHub ReleaseFeatures
- Updated agent prompts (AGENTS.md and dev3 skill) to auto-rename opaque
dev3/task-<hash>branches to meaningful names derived from the task description - Added sibling variant visibility on the Kanban board
v0.6.5
GitHub ReleaseFeatures
- Add optional branch selector to the Create Task modal
- Add standard keyboard shortcuts (Cmd+N / Ctrl+N for new task, Escape/Enter on LaunchVariantsModal, Escape on search input to clear and blur) and align all App-level shortcuts to support both Cmd (macOS) and Ctrl (Linux/Windows)
- Add end-to-end tests verifying that all 20 Shift+key sequences survive the full terminal pipeline: ghostty-web WASM handler → bytes → real PTY → tmux (with production config) → inner pane capture → assertion
Fixes
- Fix dev3 CLI connectivity when running inside Codex seatbelt sandbox
v0.6.4
GitHub ReleaseFeatures
- When reopening a completed or cancelled task, AI agents now resume the previous conversation instead of starting fresh
Fixes
- Reduced drag-to-completed latency by applying optimistic UI updates: the card now moves to the target column immediately upon drop, showing a spinner overlay and disabled state while the backend processes worktree cleanup
- The lint script now auto-generates
build-info.generated.tsif it's missing, sobun run lintworks in fresh worktrees without running a full build first - Fix terminal input glitches: use streaming TextDecoder in PTY data callback to prevent U+FFFD replacement characters from split multi-byte UTF-8 sequences, and add automatic resize dance on page visibility change to fix row offset / duplicated text issues when returning to the terminal
v0.6.3
GitHub ReleaseFeatures
- Add title generation instructions to the dev3 agent skill
Fixes
- When clicking a kanban card removes focus from the terminal, typing printable characters now automatically refocuses the terminal and forwards the keystroke
v0.6.2
GitHub ReleaseFeatures
- Added a configuration preview card below the Default Configuration dropdown in Global Settings
- Add "Create PR" button to git operations bar in TaskInfoPanel
- Tasks now support a custom title independent of the auto-generated one
- Add clipboard image paste support in the terminal
Fixes
- Narrowed the dev3 skill trigger condition to explicitly require
~/.dev3.0/worktrees/(the dev-3.0 managed directory under $HOME) instead of matching any path containing.dev3.0/worktrees/
v0.6.1
GitHub ReleaseFeatures
- Add GitHub website and Report Bug buttons to the global header
- Added "Open project folder" button to the global header that appears when inside a project
- The folder picker dialog now starts from the user's home directory by default and remembers the parent of the last picked folder for subsequent uses
- Add vertical drag-and-drop reordering within Kanban columns
Fixes
- Fix false "changes will be lost" warning when completing a task whose PR was squash-merged while main had overlapping file changes
v0.6.0
GitHub ReleaseFeatures
- Add Copy-on-Write file/directory cloning for worktree setup
- Added Cursor Agent (
agentCLI) as a built-in coding agent with six presets: Default/Plan/YOLO with Opus 4.6 Thinking, GPT-5.3 Codex High, YOLO GPT-5.3 Codex, and Gemini 3.1 Pro - Replace JetBrains Mono with JetBrainsMono Nerd Font Mono (Regular + Bold, woff2) as the primary terminal and monospace UI font
- Add zoom in/out support for the app UI
Fixes
- Pre-sign the CLI binary (dist/dev3) with the Developer ID certificate before Electrobun copies it into the app bundle
- Fix dev3 CLI binary missing from production builds
v0.5.3
GitHub ReleaseFixes
- Disable autocapitalize, autocorrect, and spellcheck on all technical input fields (base command, model, base command override, additional args, env vars, scripts, branch name) in GlobalSettings and ProjectSettings
v0.5.2
GitHub ReleaseFeatures
- Add CLI commands for label management:
label list,label create,label delete,label set, andlabel set --clear - App window now starts at 95% of the primary display's work area and is centered on screen, instead of using a hardcoded 1100x800 size
- Add reusable skeuomorphic gauge (dial) component extracted from the mastodont-app financial dashboard
- Add task search in the Kanban filter bar
Fixes
- Fix: tasks moved to Completed/Cancelled from the terminal view (or after merge) now respect the "Task Drop Position" global setting
- Add a dropdown to the branch status bar allowing users to switch the comparison ref between origin/<baseBranch> (default) and local <baseBranch>
- Fixed git operations (merge, unpushed count, worktree cleanup) breaking after branch rename in a worktree
- Fix dev3 CLI binary not found on app startup for new users
- Fixed task ordering in completed/cancelled columns for fire-and-forget status transitions
- Fix tmux session Kill button not working
v0.5.1
GitHub ReleaseFixes
- Fix environment variables not propagated to agent commands inside tmux sessions
v0.5.0
GitHub ReleaseFeatures
- Auto-move tasks from "in-progress" to "user-questions" when a terminal bell (BEL) is detected
- Add image paste (Cmd+V) and drag-and-drop attach support for task descriptions and notes
- Added terminal idle detection: when a PTY session produces no output for 15 seconds, a red notification badge (+1) appears on the task card
Fixes
- Rewrote the dev3 agent skill and system prompt to clarify task status lifecycle
- Fixed CreateTaskModal closing when clicking outside the modal area
- Fix "command too long" error on terminal restart
- Fixed GlobalSettings test "changes to canary and saves" which was failing because the update channel select is now disabled in the UI
- Fix false "pushed but not merged" warning when moving a task to completed
- Fix Shift+Tab, Shift+Enter, and other Shift+functional key shortcuts not working inside tmux terminal sessions
Refactors
- Replaced "Rebuild" menu item (which ran vite build + copy + reload) with "Hard Refresh" that simply reloads the webview to the home page
v0.4.1
GitHub ReleaseFixes
- Handle
new-window-openevent on the Electrobun webview so that Cmd+Click on URLs in the terminal opens them in the default browser viaUtils.openExternal() - Allow tasks in "todo" status to transition directly to "completed"
v0.4.0
GitHub ReleaseFeatures
- Clicking on completed or cancelled task cards now opens a full-screen modal showing all task details: description, notes (with full CRUD), labels, branch info, and timestamps
Fixes
- Fix setup script exiting with code 1 after successful completion
- Fixed infinite update loop caused by missing Updater.checkForUpdate() call before downloadUpdate()
v0.3.10
GitHub ReleaseFixes
- Replace bare
dev3CLI references in agent skill content and system prompt with the full path~/.dev3.0/bin/dev3to ensure the command works on systems where the dev3 binary is not in PATH - Reduced tmux scroll speed by adding a deltaY accumulator with a threshold of 50px
v0.3.8
GitHub ReleaseFeatures
- Add "Clone from URL" option when adding a new project
- Made tmux hint buttons (horizontal split, vertical split, zoom) in the task info panel clickable
Fixes
- Keep tmux shell alive when agent command exits with non-zero code
- Increased bottom padding of the Kanban board container from 12px (pb-3) to 16px (pb-4) so task cards don't stick too close to the bottom window edge
v0.3.7
GitHub ReleaseFeatures
- Added @file syntax support to the CLI
- Added comprehensive unit tests for cli-socket-server.ts — 61 tests covering all RPC handlers (projects.list, tasks.list, task.show/create/update/move, note.add/list/delete), handleRequest dispatch with error handling, cross-project task resolution, task status transitions (active↔inactive, reopen, cleanup), startSocketServer stale socket cleanup, and stopSocketServer
- Added comprehensive test coverage for GlobalSettings component (34 tests)
- Add task detail modal for viewing and editing full task descriptions
- Added comprehensive test coverage for the TaskInfoPanel component (60 tests)
v0.3.6
GitHub ReleaseFixes
- Fixed 8 bugs in the dev3 CLI: added --id flag support for task show/update/move; added --description flag to task create; added client-side status validation for task move and tasks list; added --limit support for tasks list; added short ID resolution (8-char IDs from
tasks listnow expand to full UUIDs via context prefix match and data file fallback); added whitespace validation for task create/update --title/--description and note add content; added --limit numeric validation rejecting NaN, negative, and partial numbers - Remove spurious
padding-bottom: 16pxfrombody, #rootin index.css that caused a white strip at the bottom of the window
v0.3.5
GitHub ReleaseFixes
- Moving a task to completed/cancelled from inside the task view now navigates back to the Kanban board instantly
- Fixed
dev3 tasks listcrashing with "Invalid JSON response" when the task list is large - The terminal was always rendered with a hardcoded dark (Tokyo Night) color scheme regardless of the app theme
v0.3.4
GitHub ReleaseFixes
- Extracted
escapeForDoubleQuotes,buildEchoAndRun, andbuildCmdScriptas testable functions fromlaunchTaskPty()inrpc-handlers.ts
v0.3.3
GitHub ReleaseFixes
- Fixed Homebrew cask SHA-256 mismatch caused by full-v* tags overwriting the ARM64 DMG on GitHub Release without updating the Homebrew formula
v0.3.2
GitHub ReleaseFeatures
- Added a confirmation dialog when moving a task to "completed" or "cancelled" status
Fixes
- Reinforced task status management requirements in both the
--append-system-promptinjection and the dev3 skill template - Remove
allowed-tools: Bashfrom the dev3 agent skill template inagent-skills.ts
v0.3.1
GitHub ReleaseFeatures
- Git action buttons (Show Diff, Uncommitted, Rebase, Push, Merge, Refresh) are now always visible in the task info panel git row
- All Claude-based agent configurations now inject
--append-system-promptwith a short mandatory reminder to invoke the/dev3skill - Added Cmd+Q and Cmd+, keyboard shortcuts
Fixes
- Fix GitHub stars badge on landing page showing "INVALID" instead of the star count
- Moving a task to its current status via
dev3 task moveno longer returns an error
v0.3.0
GitHub ReleaseFeatures
- On every app start, dev-3.0 now installs a
dev3skill file into all supported AI agent directories (~/.claude/skills/dev3/,~/.codex/skills/dev3/,~/.gemini/skills/dev3/,~/.opencode/skills/dev3/)
Fixes
- Fix duplicate task cards appearing in Kanban after launching a variant
Refactors
- Refactored TaskInfoPanel header from a single crowded row into two rows
v0.2.15
GitHub ReleaseFeatures
- Added task notes — a per-task scratchpad for markdown notes
- Add refresh button and 30-second auto-poll to tmux Sessions popover
- Added
dev3CLI tool for managing projects and tasks from the terminal - Added a "System" theme option that automatically follows the OS dark/light mode preference
Fixes
- Block "completed" and "cancelled" statuses via CLI
- Switch dev3 CLI from a Bun TypeScript script to a standalone compiled binary via
bun build --compile - CLI mutations (task create, update, move) now trigger live UI refresh
- Fixed
listTmuxSessionsmissing sessions in non-current tmux socket servers - Fix dev3 CLI PATH propagation to all tmux panes and user shells
v0.2.14
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.2.12
GitHub ReleaseFeatures
- Add cross-platform release builds for Intel macOS and Linux x64
Fixes
- Fix auto-updater repeatedly offering the same version
v0.2.10
GitHub ReleaseFeatures
- Add git and tmux as Homebrew Cask formula dependencies
v0.2.9
GitHub ReleaseFeatures
- Add Homebrew Cask support via personal tap
h0x91b/dev3
Fixes
- Fix Escape key being intercepted when terminal is focused instead of passing through to the terminal process
- Fixed kanban board horizontal scrollbar visibility in split view
v0.2.8
GitHub ReleaseFeatures
- Added task labels feature: colored label chips on task cards with instant assignment via inline LabelPicker popover, label filter bar above the Kanban board for OR-based filtering, and label management (create, rename, recolor, delete) in Project Settings
v0.2.7
GitHub ReleaseFeatures
- Show attempt number in the breadcrumb header when viewing a shell task that is a variant
- Added "Create & Run" button to the task creation modal
- Added split-view layout: clicking an active task card now opens the terminal alongside the Kanban board instead of navigating to a full-screen terminal
Fixes
- Fixed "Remove project" button on Dashboard not working
v0.2.6
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.2.4
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.2.3
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.2.2
GitHub ReleaseFeatures
- Add "Show Diff" button to task info panel git controls
- Show task title instead of tmux session name (hash-based) in the tmux sessions list popover
- Ship a bundled tmux configuration based on the developer's personal setup (mouse support, intuitive splits, 256-color, vim-friendly escape-time, clipboard/bell pass-through)
- Added tmux session manager panel to the global header
Fixes
- Fixed
bun run bump [minor|major]argument passing - Fixed changelog not showing in production builds
- Fix Cyrillic/Unicode rendering as underscores in production terminal
- App title now shows the actual build time instead of the startup time
v0.1.25
GitHub ReleaseFixes
- Fixed system requirements check for tmux (and any other tool) not finding binaries installed via Homebrew
v0.1.24
GitHub ReleaseFeatures
- Add manual refresh button and faster polling for branch status
- Added a changelog viewer page accessible from the global header
- Pressing Escape on the global settings screen navigates back to the dashboard, and on the project settings screen navigates back to the project view
- Git operations (push, rebase, merge) now run in a visible tmux terminal pane instead of silently in the background
- Integrated Google Analytics 4 (GA4) into the desktop app
- When a task is moved from completed or cancelled back to an active status, the coding agent now starts without the original task description as a prompt
- Added system requirements check on app startup
- Added x64 (Intel) macOS build to the release workflow
v0.1.21
GitHub ReleaseFixes
- Replaced all direct
Bun.spawn/Bun.spawnSynccalls across the backend withspawn/spawnSyncwrappers from the newsrc/bun/spawn.tsutility
v0.1.20
GitHub ReleaseFeatures
- Added "Soft Reset Terminal" and "Hard Reset Terminal" to the View menu
Fixes
- Bundle JetBrains Mono (Regular + Bold, woff2) as a web font so the terminal renders correctly in production builds
- Fixed dev server button silently failing in production builds
v0.1.19
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.1.18
GitHub ReleaseFeatures
- Added a default cleanup script (
say "task finished") that runs when a task is completed or cancelled, even if the user hasn't configured a custom cleanup script for the project
Fixes
- Added missing
release.baseUrltoelectrobun.config.ts
v0.1.17
GitHub ReleaseFixes
- Fix DMG creation in release workflow: unmount leftover volumes before hdiutil create to prevent "Operation not permitted" errors on self-hosted runner, add /Applications symlink to DMG for drag-and-drop install UX, and use dynamic volume names (e.g
- Rebase and branch comparison now use local branch (e.g
v0.1.15
GitHub ReleaseFixes
- Fix auto-update: actually download and apply updates instead of sending unhandled messages to the renderer
v0.1.14
GitHub ReleaseFixes
- Resolve the user's full shell PATH at app startup by spawning a login shell
v0.1.13
GitHub ReleaseNotes for this release are on its GitHub Release page.
v0.1.12
GitHub ReleaseFeatures
- Window title now shows the app version, full date with day of week, and ISO week number alongside the build time
Fixes
- Added comprehensive crash diagnostic logging across main process and renderer to investigate production-only crashes when opening task terminals
- Work around Electrobun codesign bug by removing release.baseUrl from config and creating updater artifacts (tar.zst, update.json, DMG) manually in the CI workflow
v0.1.1
GitHub ReleaseFeatures
- Added auto-update mechanism using Electrobun's built-in Updater
v0.1.0-rc6
GitHub ReleaseFixes
- Fixed "app is damaged" error on signed builds by setting COPYFILE_DISABLE=1 to prevent macOS from creating AppleDouble ._ files inside the app bundle, which invalidate code signatures
v0.1.0-rc5
GitHub ReleaseFeatures
- Added application icon for all platforms
- CI workflows now post artifact links after builds
- Added GitHub Actions CI workflow for self-hosted macOS runner
- Added macOS code signing and notarization to the release workflow
- Added stable release workflow triggered by version tags (v*)
- Added S3 upload step to CI workflow
- Added terminal preview on hover for active task cards
- Terminal preview popover now auto-refreshes every 1 second while the hover is active
- Added uncommitted changes indicator (+insertions / -deletions) to the task status line
- Added "Update Channel" dropdown (stable/canary) to Global Settings
- Auto-move task status on terminal bell: when a bell is detected (agent asking a question), the task automatically transitions from "in-progress" to "user-questions"
- Add a Push button to the task info panel that pushes the current branch to origin without merging
- Added sequential task IDs (
seq) — each task now gets a unique per-project number (#1, #2, #3...) displayed on Kanban cards, breadcrumbs, and the info panel - Show which base branch the ahead/behind commit count is compared against (e.g
- Merge button now performs a squash merge (git merge --squash + commit) using the task title as the commit message
- Added tmux hotkey hints to the TaskInfoPanel header
- When a task moves to
completedorcancelled, if the project has acleanupScriptconfigured, it now runs in a new dedicated tmux session before the worktree is removed - Replace native
<select>elements in LaunchVariantsModal with a custom styled Select component - Added git branch status (ahead/behind) display and one-click rebase to the TaskInfoPanel
- Added a status dropdown to the GlobalHeader when viewing a task terminal
- Replaced cryptic ↑N ↓N branch status arrows with human-readable yellow text ("N commits behind", "N commits ahead", "N ahead · N behind")
- Auto-copy terminal selection to system clipboard
- Added "Rebuild" item to the View menu (Cmd+R)
- Added "Dev Server" button to the task header
- Added global setting
taskDropPosition("top" / "bottom", default "top") that controls where a task appears in the destination column when dragged between statuses - Added expandable sub-panel between the header and terminal on the task screen
- Added terminal Bell signal detection and task attention indicator
- When files are dragged and dropped onto the terminal window, their full filesystem paths are now inserted into the terminal's stdin (space-separated, with spaces in paths escaped as
\) - Added inline editing for TODO tasks
- Added "Run in background (don't wait)" checkbox to Project Settings next to the setup script field
- Setup script now runs in a dedicated tmux pane (pane 0), agent runs in the bottom pane (pane 1)
- Added permission mode, effort level, and max budget fields to agent configurations
- Added a Bun watcher script (
scripts/watch-main.ts) that auto-restartselectrobun devwhen files insrc/bun/orsrc/shared/change - Added a settings (gear) icon button to each project card on the dashboard
- Add drag-and-drop between Kanban columns with status transition rules
- Redesigned the dark theme with glassmorphism aesthetics: gradient background, semi-transparent columns with per-status colored glow overlays, glass cards with hover lift, blurred header, and vibrant status colors
- Add multi-variant task spawning
- Added devScript and cleanupScript fields to Project settings alongside the existing setupScript
- Redesigned TaskCard: X button on TODO confirms before cancelling, X on cancelled confirms before deleting
- Add mouse tracking support for the embedded terminal
- Redesigned coding agents to a two-level Agent + Configuration model
- Add configurable coding agents support
- Replaced inline task creation form in the To Do column with a centered modal popup
- Added
descriptionfield to the Task model - Add native macOS application menu with App (About, Hide, Quit), Edit (Undo, Redo, Cut, Copy, Paste, Select All), View (Toggle Developer Tools, Toggle Full Screen), and Window (Minimize, Zoom, Close) menus
- Open DevTools automatically on dev channel after DOM is ready, using the BrowserView dom-ready event to avoid layout issues
- Added global breadcrumb header visible on all screens (dev-3.0 / Project / Task), replacing per-screen headers
- Added a custom i18n system with English, Russian, and Spanish support
- Implement full MVP skeleton: dashboard with project management, Kanban board with 7-column task workflow, terminal view with persistent PTY sessions and tmux, git worktree lifecycle, project settings, and Electrobun RPC bridge between bun and renderer processes
- Set up Vitest testing infrastructure with happy-dom, React Testing Library, and jest-dom matchers
Fixes
- Fixed release workflow secret names to match actual GitHub repo secrets (ELECTROBUN_TEAMID, ELECTROBUN_APPLEID, ELECTROBUN_APPLEIDPASS instead of APPLE_TEAM_ID, APPLE_ID, APPLE_APP_SPECIFIC_PASSWORD)
- Improved drag-and-drop file path resolution for files with non-unique names (e.g
- Graceful handling of corrupted tasks whose worktree directory or branch was deleted externally
- Fixed agent/configuration dropdown in LaunchVariantsModal not responding to selection
- Fixed bug where completing a task after merge didn't navigate back to Kanban board
- Fixed stuck tasks when cleanup/PTY operations fail
- Fix: completing a task from the terminal view (TaskInfoPanel) now navigates back to the project Kanban board
- Fix moveOrderMap handling for "bottom" drop position mode
- Dev server tmux pane no longer closes immediately when the process exits with an error
- PTY WebSocket server now binds to port 0 (OS-assigned) instead of hardcoded 7681
- Project settings button now visible on all project sub-screens (task view, project-settings, etc.), not just the kanban board
- Spawn tmux process immediately when task moves to In Progress, without waiting for the user to open the task terminal
- Added
cleanscript that removesdist/and the app bundle'sResources/app/directory - Fixed status dropdown menu in TaskCard flying off-screen due to
backdrop-filteron.glass-columncreating a new CSS containing block forfixed-positioned elements - Added smart viewport clamping for the status dropdown in TaskCard
- Fix: setup script and claude command failed because tmux server does not inherit custom env vars from the client process
- Styled the app name segment in the breadcrumb with a terminal icon and accent color (font-mono, tracking-wide) to visually distinguish it from project/page names
- Fixed kanban board layout: switched html root to 100dvh, applied flex-1/min-h-0 pattern through App → ProjectView → KanbanBoard → KanbanColumn so the board fills available height correctly and scrolls horizontally without overflow issues
- Changed "Review by User" kanban column color from teal (#2dd4bf) to orange (#f97316) to better differentiate it from the "Completed" status (green #34d399) and convey "action needed from user"
- Swapped colors for user-questions and review-by-user: user-questions is now orange (#f97316) to signal urgency/blocking, review-by-user is now yellow (#fbbf24) as a softer "ready for review" indicator
- Fix empty config dropdown in LaunchVariantsModal when project.defaultAgentId is null or points to a removed agent
- Centered the project settings form content with mx-auto and widened it from max-w-xl to max-w-2xl to better utilize available screen space
- Added --kill-others flag to concurrently in the dev script so all processes terminate when one exits (e.g., closing the app now also stops the Vite dev server)
- Fix Kanban columns being cut off at the bottom
- Fix Kanban columns overflowing viewport height
- Restore PTY sessions after app restart
- Fix Add Project not working: set browser-side RPC maxRequestTime to 120s (was 1s default — native dialogs and git ops timed out)
- Fix terminal garbling, lost colors, and blank screen on reconnect
Refactors
- Worktree directory restructured: each task now gets a container directory (
{shortId}/) withworktree/(git worktree) andlogs/subdirectories - Removed three deprecated fields from the Project interface:
defaultTmuxCommand,defaultAgentId, anddefaultConfigId - Separated agent configuration from project settings into global settings
- Consolidate all app data under ~/.dev3.0/
- Extracted all hardcoded hex colors into CSS custom properties (design tokens) with Tailwind integration
- Move tasks.json from project directory ({project}/.dev3/tasks.json) to home directory (~/.dev3.0/data/{project-slug}/tasks.json)
- Second UI pass: switched from ultra-dark (#0f1014) to midnight indigo (#171924) palette
- Complete UI redesign: darker base background (#0f1014), color-coded Kanban columns with status accent bars, custom dropdown menus replacing native select elements, SVG icons for navigation and actions, styled scrollbars, hover-reveal delete buttons, project cards with folder icons, animated loading states
- Move git worktrees from
{project}/.dev3/worktrees/to~/.dev3.0/worktrees/{project-slug}/{taskId}