github NeuralNomadsAI/CodeNomad v1.0.0

3 hours ago

CodeNomad 1.0 on desktop and mobile

CodeNomad 1.0.0 — OpenCode V2, on desktop and mobile

The best desktop and mobile client for OpenCode V2.

0.20.0 brought CodeNomad to OpenCode V2. 1.0.0 turns more of its native power into a complete workspace: coordinated agents, deeper history access and visual automation, with speed, efficiency and everyday stability at its core.

Highlights

  • Desktop and mobile: Pair another device through OpenTunnel-powered Remote Control, with an interface adapted to phones and tablets.
  • Very fast and efficient: Responsive streaming and navigation, controlled resource use and persistent workspace state support demanding, long-running agent workflows.
  • Missions: Combine OpenCode V2's native sessions, subagents and human questions into coordinated work toward an objective.
  • Beyond the public API: Native plugins and RPC unlock full-history queries, timeline navigation and selective cleanup.
  • Visual automation: Let agents inspect and operate CodeNomad and desktop browser previews to check what they build.
  • An extensible workspace: Files/Git, panel extensions, online help, customizable shortcuts and signed Tauri updates complete the experience.

Built for demanding workflows

  • A responsive workspace: Streaming, search and navigation render the content you need, while project restoration prioritizes your active conversation.
  • Controlled resource use: Bounded history queries, targeted rendering and lazy Files/Git refreshes support large conversations and busy repositories without loading everything into the interface.
  • Built for long sessions: Stable reading anchors and on-demand output expansion let you inspect earlier work while agents continue running.
  • Continuity across your work: Saved projects, drafts and window state carry your workspace across sessions; native request recovery keeps questions and permissions connected to their conversations.

Built around OpenCode V2

  • The shared OpenCode service keeps conversations available to terminal and other clients. New sessions respect native default agents, including plugin-provided defaults; collapsed families show subagent activity.
  • Attach skills through @; inspect Code Mode scripts, nested tool calls and web-search sources. Search providers support global defaults and project overrides.
  • Answer native questions and permissions above the composer, with source labels, preserved drafts and readable answer/decision receipts.
  • Manage native provider accounts and optionally rotate eligible subscription accounts when a quota is exhausted. Usage follows the selected account; Stats adds service-wide activity, token, recorded cost and per-model views.

Missions and native multi-agent coordination

  • An objective becomes a plan: Coordinators delegate to specialists through real OpenCode sessions, native subagents or independent conversations, using your chosen agents, models and reasoning settings.
  • Five approaches: Flexible, Debugging, Exploration, Product delivery and Compare two models. The new comparison scenario gives two models the same task, then produces a blind, scored verdict. Dependencies and results remain visible as plans evolve.
  • Human decisions stay human: Native questions and permissions bring you into the work; milestone briefings, summaries and reports explain progress without requiring you to follow every conversation.
  • One-time or daily work: Prepare and explicitly start a mission, use pause/stop/recovery controls, and save reusable briefs. Execution, background work and plugin infrastructure stay native to OpenCode—not a replacement engine.

From your desktop to your phone

  • Remote Control uses OpenTunnel, as does OpenCode's remote pairing: access your running workspace from a mobile browser or another desktop without opening an inbound port or configuring a VPN. Devices are revocable; enabled Remote Control resumes at launch.
  • The composer follows the on-screen keyboard; questions and permission actions stay reachable. Tablet panels remember portrait/landscape layouts, with compact headers and touch-friendly menus.
  • Mobile uses the responsive web interface, not a native iOS/Android app. Direct/LAN access remains a separate option.

History and visual automation

  • Native plugins run inside OpenCode and expose authenticated RPC over stored history, extending the public API with full-session/workspace search, timeline navigation and technical-content cleanup. Results identify their conversation and worktree and open the matching exchange.
  • Agents can inspect, click, type, select, scroll, drag, use keyboard shortcuts and wait for results in CodeNomad and desktop browser previews—verifying rendered work, not only editing source.
  • Each conversation retains its browser page and navigation history. Preview tabs share sign-ins within the desktop profile, separately from the trusted application.

Files, Git and everyday work

  • Workspace, Changes and Commits share one Files panel: edit text/Markdown, inspect images and diffs, stage/unstage, review history and initialize Git. Scoped filesystem updates refresh visible folders; large inventories stay responsive and refreshed diffs preserve selection and scroll.
  • Temporary projects, tab renaming, a compact launcher and Back/Forward conversation navigation simplify everyday work. Shortcuts jump between your own messages, and an alternate send (Alt+Enter by default) queues or steers a follow-up against your usual choice. An optional whitespace filter focuses reviews on meaningful changes.
  • Native worktrees, session-family navigation, device attachments and /btw build on 0.20.0. After sending, use the conversation for keyboard reading; typing resumes the composer.

Extensions, help and customization

  • Install panel extensions from the online catalogue without rebuilding CodeNomad. MCP Assets collects tool-returned images and attachments with explicit session-asset consent. Native OpenCode plugins retain Global/Project activation and package check/update actions.
  • Online help covers setup and workflows in ten languages, from Help and the command palette.
  • Customizable shortcuts, notification routing and unread badges join compact Settings, localized menus and more consistent light/dark surfaces. Message content presets choose how much of each response to show. A new hexagon CN logo marks the app, and macOS windows use native window controls with a single menu bar. SideCars provide additional workspace panels.

Desktop updates and setup

  • Signed Tauri updates support Windows, macOS Intel/Apple Silicon and Linux AppImage. Stable/Preview feeds are separate from data profiles, preserving your tabs and drafts when changing feeds. Settings → General lists the data profiles on this computer, switches to one or creates and deletes them.
  • OpenCode setup adds clearer progress, interrupted-install recovery and explicit restart controls. Older installations on PATH no longer leave setup without a path forward.
  • Preferences restore the correct project context; incomplete request recovery preserves known questions and permissions and reports its cause.

Upgrading

  • OpenCode 2.1.2 or newer is required; 2.1.4 is recommended. This release adopts the OpenCode 2.1 message, event and plugin contracts, and 2.1.2 fixes Code Mode's JavaScript execution order. With 2.1.4, input requests from MCP servers appear in the request dock. CLI updates and shared-service restarts remain separate; Git enables the full repository/worktree experience.
  • Downloads: Windows Tauri .exe or Electron .zip; Linux Tauri AppImage or Electron .deb; Tauri or Electron macOS builds, separate for Intel and Apple Silicon. The Electron .deb replaces the former Tauri .deb—choose AppImage to stay on Tauri.
  • Stable 0.20.0/0.20.1 users install from the release download or package manager; recent signed previews already have the updater. Update remote CodeNomad servers too. Multi-window state, restoration and named profiles remain supported.
  • The macOS builds are not yet notarized by Apple: macOS can block their first launch, see Troubleshooting → macOS quarantine. The Windows installer is not code-signed, so SmartScreen can ask for confirmation.

Thanks for contributions

Thanks to creator @shantur, @pascalandr, @heunghingwan, and everyone who contributed ideas, reports and testing.

Changes since 0.20.0: v0.20.0...v1.0.0

What's Changed

  • fix(chat): keep question and permission panels usable on mobile by @pascalandr in #845
  • fix(opencode): keep service restart available in troubleshooting by @pascalandr in #844
  • fix(chat): preserve answer focus during session activation by @pascalandr in #846
  • fix(chat): keep interruption forms within the conversation and subagents by @pascalandr in #847
  • feat(chat): make cross-conversation requests explicit and expandable by @pascalandr in #848
  • fix(ui): preserve right panel width across minimize and restore by @pascalandr in #850
  • perf(ui): skip redundant outline and superseded Markdown work by @pascalandr in #852
  • fix(ui): harmonize disclosure chevrons and pending request badges by @pascalandr in #853
  • fix(ui): yield and batch transcript rotation replay by @pascalandr in #855
  • perf(search): paint transcript matches with CSS highlights by @pascalandr in #854
  • chore(search): remove generated artifacts and committed documentation by @pascalandr in #856
  • chore: remove historical reports and generated artifacts by @pascalandr in #857
  • fix(release): follow package version for development prereleases by @pascalandr in #858
  • fix(prompt): resolve repeated root mentions without sentinels by @pascalandr in #864
  • fix(pending): stop cold-worktree recovery fallback; qualify OpenCode 2.0.24 by @pascalandr in #865
  • feat(extensions): install independently distributed right-panel addons by @pascalandr in #862
  • fix(ui): keep panel extensions compact and open management separately by @pascalandr in #869
  • fix(chat): keep request icons and show complete red badges by @pascalandr in #871
  • fix(extensions): simplify management inside customization by @pascalandr in #872
  • feat(ui): rendre la recherche et la palette de commandes déplaçables by @pascalandr in #870
  • feat(notifications): unread badges on browser and desktop icons by @pascalandr in #873
  • fix(permissions): skip receipt reads for draft sessions by @pascalandr in #878
  • fix: recover pending requests despite deleted session directories by @pascalandr in #877
  • fix(ui): show sent skills and reuse the attachment bar by @pascalandr in #879
  • feat(extensions): add bounded session assets for the MCP gallery by @pascalandr in #874
  • fix(tauri): prevent WebView2 F6 browser-process crash by @pascalandr in #881
  • docs: remove obsolete development readouts and specifications by @pascalandr in #882
  • refactor: retire obsolete docs, dead APIs and speculative loaders by @pascalandr in #880
  • fix(pending): align snapshot client deadline with broker budget by @pascalandr in #885
  • fix(browser): preserve per-session previews and Back history by @pascalandr in #884
  • fix(usage): show Claude Code quotas and sync providers with OpenChamber by @pascalandr in #886
  • feat(remote-control): add Remote Control over OpenTunnel alongside direct access by @pascalandr in #668
  • feat(ui): put Remote Control first and collapse direct access by @pascalandr in #888
  • fix(transcript): reveal omitted message parts in place instead of a copy-only footer by @pascalandr in #890
  • test(browser): prepare cold header fixtures before navigation by @pascalandr in #896
  • feat(ui): rename a project from its tab by @pascalandr in #893
  • fix(sessions): reveal busy subsessions only in the viewed conversation by @pascalandr in #897
  • fix(browser): share cookies and site storage across session tabs by @pascalandr in #898
  • fix(desktop): separate the update feed from the local data profile by @pascalandr in #891
  • chore(remote-control): update OpenTunnel to 0.4.1 by @pascalandr in #895
  • feat: temporary instances that are kept or discarded when closed by @pascalandr in #899
  • fix(sessions): show subsession activity on the collapsed parent's chevron by @pascalandr in #900
  • fix(ui): keep the composer height independent per instance by @pascalandr in #903
  • feat(ui): remember side drawers per orientation on touch tablets by @pascalandr in #904
  • fix(release): retain local remote-tunnel dependency after version bumps by @pascalandr in #907
  • feat(ui): add a Go button to the directory browser path field by @pascalandr in #906
  • fix(restore): persist the full session hierarchy before network hydration by @pascalandr in #841
  • fix(ui): restore temporary tabs without a home resume list by @pascalandr in #908
  • fix(pending): stop Git process fans from starving pending-request recovery by @pascalandr in #909
  • feat(missions): native project coordination, briefings and tracking by @pascalandr in #866
  • feat(ui): open a compact new-instance launcher on long press by @pascalandr in #911
  • fix(restore): keep the selected transcript read ahead of startup traffic by @pascalandr in #910
  • fix(restore): prevent closed search from cancelling startup messages by @pascalandr in #912
  • fix(pending): exclude proven out-of-scope historical locations by @pascalandr in #913
  • feat(ui): assign backgrounds by surface role and harmonize menus by @pascalandr in #914
  • fix(prompt): open the mention picker only for an @ that starts a word by @pascalandr in #916
  • fix(prompt): never replace a draft from history and keep pastes undoable by @pascalandr in #919
  • fix(opencode): share host plugin runtime and require 2.0.27 by @pascalandr in #920
  • fix(restore): release the loading flag of a discarded message load by @pascalandr in #917
  • chore(ui): remove dead CSS left by retired components by @pascalandr in #915
  • fix(remote-control): resume after restart and keep paired devices visible by @pascalandr in #921
  • chore(remote-control): update OpenTunnel to 0.5.1 by @pascalandr in #922
  • fix(restore): resume saved tabs after mandatory OpenCode setup by @pascalandr in #923
  • feat(accounts): rotate subscription accounts across providers, including OpenCode Go by @pascalandr in #924
  • fix(plugins): wait for plugin registration before the first plugin RPC by @pascalandr in #925
  • fix(sessions): shorten the session filter-bar checkbox labels by @pascalandr in #930
  • fix(chat): show why a run failed in the transcript by @pascalandr in #927
  • fix(remote-control): keep a connected tunnel open past the start deadline by @pascalandr in #931
  • feat(remote-servers): pair a desktop window through a Remote Control link by @pascalandr in #928
  • fix(temporary): close the tab before discarding and skip the prompt when empty by @pascalandr in #932
  • feat(files): initialize Git from the Files panel for plain folders by @pascalandr in #933
  • feat(files): hide whitespace-only changes (Advanced setting, on by default) by @pascalandr in #934
  • feat(shell): fixed panel toggles and back/forward session navigation by @pascalandr in #936
  • fix(ui): make the shared active toggle state clearly visible by @pascalandr in #937
  • test(missions): wait for the missed passage admission before Stop by @pascalandr in #935
  • test(missions): bound until() in real time and wait for quiescent Jobs before Stop by @pascalandr in #939
  • fix(remote-control): quit with the last window instead of running headless by @pascalandr in #938
  • feat(settings): add a customizable keyboard shortcut manager by @pascalandr in #940
  • test: stabilize three intermittent CI failures on dev by @pascalandr in #941
  • ci: refresh actions and monitor bundled Node/npm maintenance by @pascalandr in #945
  • feat(tauri): cross-platform updater and Linux AppImage distribution by @pascalandr in #786
  • fix(git): reload a refreshed diff in place instead of remounting the editor by @pascalandr in #947
  • docs(readme): document the Electron Linux sandbox setup and the Tauri AppImage by @pascalandr in #949
  • feat(missions): add a Product delivery playbook based on NomadWorks by @pascalandr in #946
  • chore(opencode): qualify runtime 2.0.29 and align client/plugin pins by @pascalandr in #948
  • fix(ui): make the confirmation accent follow keyboard focus by @pascalandr in #951
  • fix(ui): keep the filled confirm button and show the focus ring from the start by @pascalandr in #952
  • fix(ui): remove the Material ripple from icon buttons by @pascalandr in #950
  • fix(ui): preserve portaled menu actions above floating panels by @pascalandr in #956
  • build: ship the Linux deb from Electron and the Windows installer without a ZIP by @pascalandr in #955
  • feat(ui): report a bug from Settings with the prefilled issue form by @pascalandr in #957
  • fix(server): strictly parse boolean switch environment variables by @pascalandr in #959
  • fix(updates): route the Preferences button and menu from Preferences through the desktop updater by @pascalandr in #960
  • docs(help): multilingual help site with in-app Help menu and palette entry by @pascalandr in #859
  • fix(ui): name the Windows/macOS release and real architecture in Info by @pascalandr in #961
  • feat(ui): merge Updates into About and move connectivity last in Info by @pascalandr in #962
  • test(ui): isolate the icon-button fixture cache by @pascalandr in #953
  • fix(missions): keep ordinary conversations promptable after identity drift by @pascalandr in #954
  • feat(desktop): localize native menus and open About in Settings → Info by @pascalandr in #963
  • feat(plugins): native package check and update (6/8) by @pascalandr in #794
  • fix(pending): recover requests in nested checkouts the workspace already owns by @pascalandr in #964
  • fix(pending): name the cause, folders and sessions in the recovery warning by @pascalandr in #965
  • fix(pending): wait out backend compaction deferrals instead of warning by @pascalandr in #966
  • fix(chat): give each transcript scroll decision a single owner by @pascalandr in #967
  • feat(stats): display service-wide activity statistics by @pascalandr in #968
  • fix(workspaces): closing a project tab closes the project in CodeNomad by @pascalandr in #970
  • fix(chat): resume follow when a downward gesture reaches a streaming tail by @pascalandr in #969
  • refactor(chat): centralize transcript scroll writes and add opt-in tracing by @pascalandr in #971
  • fix(chat): keep escaped readers in place when Virtua re-estimates rows by @pascalandr in #974
  • refactor(ui): share nested-scroller and height-delta primitives, drop dead scroll state by @pascalandr in #973
  • fix(diagnostics): include OpenCode versions and the server's OS release by @pascalandr in #979
  • refactor(chat): merge explicit bottom pins and element alignment into existing loops by @pascalandr in #978
  • refactor(chat): give transcript navigation a single owner state by @pascalandr in #972
  • refactor(chat): give transcript bottom placement a single path by @pascalandr in #976
  • perf(chat): persist transcript scroll when it settles; drop dead render notifications by @pascalandr in #977
  • fix(opencode-setup): offer OpenCode 2 when an old or foreign OpenCode blocks setup by @pascalandr in #982
  • ci: start desktop binary builds with Tauri Windows by @pascalandr in #984
  • feat(chat): show reasoning and tool durations, live while running by @pascalandr in #985
  • test: fix POSIX legacy-shim fixture and server OS-name expectation by @pascalandr in #983
  • refactor(chat): finish transcript scroll migrations and fix known scroll follow-ups by @pascalandr in #980
  • fix(chat): show part durations as 3s, not a clock reading by @pascalandr in #988
  • fix(composer): order @ mentions as files, agents, then skills by @pascalandr in #989
  • docs(help): list Remote Control before direct access by @pascalandr in #990
  • feat(history): name the conversation and worktree of workspace search results by @pascalandr in #993
  • chore(ui): upgrade virtua to 0.53.5 to fix near-bottom shrink over-correction by @pascalandr in #991
  • refactor(chat): render the transcript header as Virtua's first row by @pascalandr in #992
  • fix(sidecars): keep SideCar frames same-origin so proxied requests authenticate by @heunghingwan in #994
  • fix(sidecars): isolate application cookies from upstream services by @pascalandr in #995
  • fix(chat): put tool durations after the status; hide sub-second durations by @pascalandr in #997
  • fix(tauri): prevent Windows event-loop refcount corruption by @pascalandr in #996
  • test(browser): accept the readable OS name in server system info by @pascalandr in #998
  • docs(sidecars): document SideCars as trusted same-origin extensions by @pascalandr in #1001
  • docs(sidecars): condense the rejected-isolation rationale to one line by @pascalandr in #1002
  • docs(sidecars): keep rejected-isolation history out of the architecture notes by @pascalandr in #1003
  • docs(sidecars): drop the rejected-isolation trace from agent guidance by @pascalandr in #1004
  • fix(usage): explain the ChatGPT token-sharing quota limitation by @pascalandr in #999
  • fix(transcript): reveal display-truncated text in place instead of a copy-only suffix by @pascalandr in #1000
  • fix(files): keep large Changes lists responsive across refreshes by @pascalandr in #1006
  • fix(sessions): respect OpenCode's resolved default agent by @pascalandr in #1007
  • fix(sessions): show idle subsessions on collapsed parent chevrons by @pascalandr in #1010
  • fix(missions): compact coordinator tool results and state the decision rule by @pascalandr in #1011
  • fix(server): stop destroying the SSE event stream on single oversized frames by @heunghingwan in #1012
  • feat(missions): coordinator hand-offs, task interrupts and native decision evidence by @pascalandr in #1013
  • feat(settings): compact Settings, unified notification routing and autosaving Missions preferences by @pascalandr in #1014
  • fix(notifications): keep the incomplete-recovery warning on screen by @pascalandr in #1016
  • feat(automation): shared page engine with budgeted outlines, select and replacing type by @pascalandr in #1015
  • fix(transcript): keep stream events from re-rendering unchanged messages by @heunghingwan in #1017
  • fix(ui): initialize header menu memo after its dependencies by @pascalandr in #1019
  • fix(files): keep the Changes stage icon after the row's overflow menu opens by @pascalandr in #1021
  • feat(automation): pointer, keyboard, hover, scroll, drag and wait in the app window by @pascalandr in #1018
  • feat(automation): unify browser previews on the shared page engine by @pascalandr in #1020
  • fix(preferences): rebind restored project context after backend startup by @pascalandr in #1022
  • fix(missions): run the one-time human gate in the invoking native graph by @pascalandr in #1023
  • test(missions): fold the one-time decision journey into the trajectory fixture by @pascalandr in #1024
  • fix(files): refresh Workspace with scoped, rate-limited invalidations by @pascalandr in #1030
  • fix(composer): resume typing from the conversation focused after a send by @pascalandr in #1032
  • feat(missions): add a "Compare two models" Mission template by @pascalandr in #1026
  • fix(sessions): wire finish, retry and usage signals to OpenCode V2 events by @pascalandr in #1033
  • chore(opencode): qualify 2.1.0 and adopt its native contracts by @pascalandr in #1029
  • fix(notifications): keep session states out of history by default by @pascalandr in #1035
  • test(notifications): opt into history in lifecycle delivery checks by @pascalandr in #1036
  • test(notifications): typecheck lifecycle fixture mock hooks by @pascalandr in #1038
  • fix(tokens): hide message usage in presets and keep compact summaries visible by @pascalandr in #1037
  • fix(projects): keep the new-tab launcher project-only by @pascalandr in #1039
  • chore(opencode): retire adaptations for runtimes and events OpenCode V2 no longer produces by @pascalandr in #1034
  • fix(settings): accent update and pairing actions by @pascalandr in #1042
  • test(pruning): align native UI journey with token grouping by @pascalandr in #1040
  • fix(stats): restore cached totals and refresh only while visible by @pascalandr in #1041
  • feat(transcript): add a Nothing preset and a preset menu in Message content by @pascalandr in #1043
  • test(missions): await recurring fixture clock quiescence by @pascalandr in #1044
  • chore(release): prepare CodeNomad 1.0.0 versions by @pascalandr in #1045
  • test(status): find the Tokens trigger when its summary is shown by @pascalandr in #1048
  • feat(timeline): follow Message content tool visibility by @pascalandr in #1049
  • docs: publish a privacy policy by @pascalandr in #1046
  • fix(settings): answer startup state from a live window and spin the Stats refresh by @pascalandr in #1050
  • docs: propose CodeNomad code signing policy by @pascalandr in #1051
  • fix(settings): show OpenCode version first and drop the Runtime header by @pascalandr in #1052
  • fix(updates): offer a preview release only once all its builds are published by @pascalandr in #1053
  • fix(timeline): highlight the message's visible marker instead of a hidden tool by @pascalandr in #1056
  • feat(composer): queue or send now from the More actions menu, Alt+Enter by default by @pascalandr in #1054
  • chore(opencode): qualify and recommend runtime 2.1.1 by @pascalandr in #1055
  • fix(hotkeys): name each action's shortcut in its button tooltip by @pascalandr in #1057
  • fix(timeline): stop adding an empty agent marker after every tool step by @pascalandr in #1058
  • fix(transcript): show one token line per agent response so tool groups stay whole by @pascalandr in #1059
  • ci(linux): compare Electron deb owners by numeric ID by @pascalandr in #1060
  • ci(tauri): stop the refcount negative control at its first crash and warn when a runner never races by @pascalandr in #1061
  • fix(timeline): space every marker evenly by @pascalandr in #1062
  • fix(transcript): show a token line after every agent message by @pascalandr in #1063
  • fix(missions): run Missions on the standalone server and name each unavailable cause by @pascalandr in #1070
  • fix(plugins): report a provisioning cut short by a replaced connection as superseded by @pascalandr in #1071
  • ci(help): pin the Pages workflow actions to exact current releases by @pascalandr in #1072
  • test(pruning): expect response usage to keep tool steps in one group by @pascalandr in #1074
  • fix(tests): read the abort cause structurally so the server build compiles by @pascalandr in #1073
  • fix(recovery): reconcile removed worktrees without hiding live interruptions by @pascalandr in #1076
  • fix(opencode): qualify 2.1.2 and require correct Code Mode job ordering by @pascalandr in #1078
  • docs(help): bring the user guide back in line with the current app by @pascalandr in #1079
  • feat(transcript): jump to the previous or next user message with Shift+Up/Down by @pascalandr in #1077
  • fix(worktrees): separate fresh recovery and display refresh outcomes by @pascalandr in #1080
  • ci(help): remind PRs that change UI labels to update the user help by @pascalandr in #1081
  • ci: compare repacked deb hardlinks by type and accept callback faults in the Tauri negative control by @pascalandr in #1083
  • docs(agents): keep AGENTS.md to universal rules and agent docs to the current state by @pascalandr in #1082
  • ui: keep the message token disclosure on one row in both states by @heunghingwan in #1084
  • fix(transcript): keep the collapsed token summary muted and the chevron level at any font size by @pascalandr in #1085
  • fix(transcript): jump between user messages with Alt+Up/Down, also from the composer by @pascalandr in #1087
  • fix(worktrees): omit a checkout mid-removal instead of failing the whole inventory by @pascalandr in #1089
  • fix(transcript): keep streaming live across shared-stream reconnects by @heunghingwan in #1088
  • fix(opencode): keep a working connection when a periodic recheck is inconclusive by @pascalandr in #1090
  • fix(timeline): mirror every transcript block in order and keep clicks on the clicked marker by @pascalandr in #1086
  • fix(tauri): stop AppImage helpers before exit so WebKit never crashes on quit by @pascalandr in #1091
  • fix(tauri): keep the Linux native menu bar hidden without losing accelerators by @pascalandr in #1092
  • fix(opencode): explain why OpenCode 2 cannot be installed beside an older command by @pascalandr in #1093
  • docs(help): describe the macOS Not Opened block and the Open Anyway route by @pascalandr in #1094
  • fix(transcript): name the agent and model in message headers like the composer by @pascalandr in #1095
  • fix(notifications): show one notification per session compaction by @pascalandr in #1096
  • test(ui): stub toast dismissal in the pending-compaction fixture by @pascalandr in #1097
  • chore(opencode): qualify and recommend runtime 2.1.3 by @pascalandr in #1098
  • feat(brand): replace the logo with the bare CN mark by @pascalandr in #1099
  • chore(brand): remove the previous logo's source image by @pascalandr in #1100
  • feat(titlebar): show the CodeNomad mark instead of the window title by @pascalandr in #1102
  • fix(titlebar): size the CodeNomad mark at 20 px by @pascalandr in #1103
  • fix(titlebar): size the CodeNomad mark at 14 px by @pascalandr in #1104
  • fix(brand): size large CodeNomad logos by their title by @pascalandr in #1108
  • feat(desktop): give macOS windows native traffic lights and one menu bar by @pascalandr in #1105
  • feat(notifications): show Clear all and Settings as icons in the history by @pascalandr in #1107
  • fix(brand): let the app icon span its square edge to edge by @pascalandr in #1110
  • fix(notifications): show Windows system notifications and keep their permission by @pascalandr in #1109
  • fix(transcript): keep streaming reasoning rendering past the display bound by @heunghingwan in #1106
  • feat(brand): adopt the hexagon CN logo, black or white by palette by @pascalandr in #1114
  • fix(titlebar): show the hexagon logo at 20 px by @pascalandr in #1116
  • fix(session): clear a queued follow-up's badge when it is delivered by @pascalandr in #1117
  • fix(transcript): load large tool images on demand instead of inline by @pascalandr in #1118
  • fix(server): send the server version in the UI manifest User-Agent by @pascalandr in #1121
  • feat(settings): give Updates its own card and the data profile a Startup row by @pascalandr in #1122
  • feat(settings): manage desktop data profiles and drop the startup question by @pascalandr in #1123
  • fix(server): authenticate the path the router routes, not the raw target by @pascalandr in #1124
  • fix(previews): never forward the app's cookies to the previewed site by @pascalandr in #1125
  • fix(forms): keep a live global Form's location for its reply by @pascalandr in #1127
  • chore(opencode): qualify and recommend runtime 2.1.4 by @pascalandr in #1126
  • fix(ui): restore the web preview entry on mobile, hide it through Remote Control by @pascalandr in #1128
  • Release v1.0.0 — OpenCode V2, on desktop and mobile by @pascalandr in #1028

Full Changelog: v0.20.1...v1.0.0

Don't miss a new CodeNomad release

NewReleases is sending notifications on new releases.