Baton Changelog

Baton Desktop 0.3.0 — Import from other agents, run status, and GitHub button diagnostics

0.3.0 lets you bring your existing agent setup into Baton, and makes the progress of AI turns and the state of the GitHub button easier to understand.

Import from other agents

Import from other agents: choosing sources, with Codex and Claude Code selected and the number of items found in each

  • New "Import from other agents": scans Codex and Claude Code on this computer and imports MCP servers, Skills, compatible settings (such as the default model), and projects.
  • Four steps: choose sources → choose content → review → results. The results page lists imported, deduplicated, and skipped entries with reasons.
  • Merge only: existing Baton settings are never overwritten, identical entries are deduplicated, and on conflict Baton keeps its current version.
  • Credentials stay where they are and are never copied; MCP servers that contain credentials are skipped. Unsupported content such as memories, instruction files, Hooks, and slash commands is listed on the review step with the reason it is not imported.
  • External worktrees of a project can optionally be imported as Baton workspaces; they are unticked by default.
  • Baton prompts once on first launch, including after upgrading from an earlier version; you can open it again anytime from Settings.

(Thanks to @森森森在哪呢 for the suggestion.)

Run status for AI turns

  • While a turn runs, a single status line shows "Working · what it is doing now", for example "Run npm test", with a timer. The step details are folded by default and open with a click.
  • When the agent needs your answer, the status reads "Needs your input" and the question card appears directly, never folded away.
  • When the turn ends it folds into "Worked for 2m 13s · N tool calls"; stopped or failed turns read "Stopped after …" or "Failed after …". The duration is saved in the conversation and survives a reload.
  • If you expand or collapse a turn yourself, that choice is kept, and the end of the turn never folds it.
  • Screen readers announce only state changes; the timer is no longer read out every second.

GitHub button diagnostics

  • The GitHub button now names the exact cause, such as GitHub Login Expired, GitHub Unreachable, Git Untrusted, Folder Missing, or Not a Git Repository, instead of a generic setup prompt.
  • Clicking the button explains the cause and offers the matching action: sign in again, retry, copy the fix command, or open Doctor.
  • Sign-in status is checked against the active GitHub account, so an expired inactive account no longer causes a false warning.

Model catalog

  • Refreshed the models.dev catalog and BYOK presets.

Check for updates in Baton, or download it from hecara.com.

Baton Desktop 0.2.5 — More reliable reviews, Git remote compatibility, and clearer errors

0.2.5 builds on the stability improvements in 0.2.3, focusing on code reviews, Git worktree creation, and feedback when an operation fails.

More reliable reviews with Thinking models

  • Fixed cases where a BYOK Thinking model finishes its analysis but returns only text without submitting the review result. Baton now preserves the previous reasoning and asks once more for the complete result. If submission still fails, it reports an error instead of showing “no issues found.”
  • Removed the fixed 4,096-token output cap from local code reviews, allowing the provider's output budget to apply. This reduces cases where reasoning consumes the budget before a result can be submitted. Truncated replies can also receive one continuation attempt.
  • Corrective submissions preserve DeepSeek reasoning content, Anthropic Thinking signatures, and the selected reasoning level.

DeepSeek reasoning compatibility

  • Updated model detection to cover names such as deepseek-v4.1-* and deepseek-flash.
  • Updated the mapping to the current low, high, and max values: low uses low, medium and xhigh use high, and max uses max.
  • Disabling Thinking still sends an explicit disabled setting, helping prevent the provider's default from turning reasoning back on.

Self-hosted Git remotes and worktrees

  • Worktree creation no longer always assumes the remote is named origin. Baton first uses the branch's configured upstream; otherwise, it uses origin or the only other remote.
  • When multiple remotes exist without origin and the branch has no upstream, Baton asks for an explicit remote branch instead of choosing the wrong repository.
  • New worktrees configure their upstream using the selected remote. Fetching the remote base branch now uses the user's login-shell environment, improving compatibility with local SSH, credential, and PATH configuration.
  • Fetch failures retain Git diagnostic details after filtering sensitive information, helping distinguish authentication, connection, and branch problems.

Consistent failure notifications

  • Routed runtime failures from terminal startup, file and diff loading, model-list fetching, Skills operations, MCP imports, prompt optimization, and other actions through the shared notification queue.
  • Failures when opening a project directory now use an in-app notification instead of a system alert. Validation messages for editable input, such as branch names, remain next to the form.
  • Re-rendering no longer repeatedly shows the same error. Hidden file and review tabs also avoid notifying before they are visible.
  • Screenshot capture and handoff windows have their own notification queues, so errors can also appear in those separate windows.

Requirements Assistant and Quick Start

  • Fixed the Requirements Assistant sidebar toggle becoming unclickable after collapse because it overlapped the window's draggable region.
  • Quick Start now uses a stable dialog height that adapts to smaller windows. The form scrolls while the bottom actions remain visible.
  • Simplified repeated instructions and template-card text. The directory-name hint is no longer repeated when it matches the entered project name.

Model catalog

  • Refreshed the models.dev catalog and BYOK presets with updated model availability and metadata.

Check for updates in Baton, or download it from hecara.com.

Baton Desktop 0.2.3 — Requirements Assistant Beta and stability improvements

0.2.3 labels the Requirements Assistant as Beta and improves long replies, code review, and recovery from window errors.

Requirements Assistant Beta

  • Capture ideas, requirements, and bugs in chat, keep the original messages, and view, edit, and manage their status in a table.
  • Generate execution prompts from the project code, with manual editing and regeneration.
  • Choose an Agent and run requirements in the current workspace, an existing worktree, or a new worktree. Run multiple requirements sequentially, or in parallel with a separate worktree for each.
  • Check implementation after execution and ask the Agent to finish any remaining work.

Smoother long replies and window recovery

  • Batch consecutive BYOK display updates to reduce write and rendering pressure during long replies, while preserving the complete response and its order.
  • Local rendering errors now show a Retry action, helping prevent an individual message error from blanking the entire window.
  • Crashed or persistently unresponsive windows attempt automatic recovery. Repeated failures show a manual reload action, and diagnostic logs are recorded.

Reasoning controls for code review

  • Choose a model-supported reasoning level independently for code review with Codex, Claude, and BYOK.
  • Fixed review failures caused by incompatible tool-call parameters in Thinking mode on some BYOK models.

A more compact chat layout

  • The content area and composer now have a maximum width of 800px.
  • AI replies and user bubbles now have a maximum width of 700px.

Check for updates in Baton, or download it from hecara.com.

Baton Desktop 0.2.2 — Better code review and notifications

0.2.2 improves code review in Bug Reports with independent Agent configuration and clear failure reasons, while reducing interruptions from completion notifications.

Choose a dedicated code review Agent

  • Added Code review Agent under Settings → Agents → Models. Choose an independent Agent and model, or follow the default Agent.
  • Bug Reports now supports review through Codex and Claude, alongside verified BYOK models that support tool calls.
  • Unsupported Agents and failed requests show a short reason directly in the panel, with expandable details and a Retry button.
  • Manual Review and Retry run again using the latest review configuration.

Less intrusive completion notifications

  • A conversation you are currently viewing no longer sends a redundant completion alert.
  • Tasks finishing close together are grouped into one notification, reducing repeated sounds.
  • Simplified desktop notification and sound settings, including a no-sound option and guidance to open system settings when notification permissions are restricted.

Update checks and interface refinements

  • Automatic update checks now run every 30 minutes instead of every six hours.
  • Refined the navigation rail and toast appearance, and adjusted the macOS window button position.
  • Removed the Inbox total-count badge and refreshed multilingual interface copy.

Check for updates in Baton, or download it from hecara.com.

Baton Desktop 0.2.1 — Let agents get to work sooner

This update reduces preparation time from creating a workspace to sending follow-up messages, and fixes everyday issues with attachments, file links, and workspaces. It is available for macOS (Apple Silicon) and Windows (x64).

Start tasks sooner and keep conversations flowing

  • Send as soon as the workspace is ready. Once the workspace and AI conversation are created, the first message sends alongside page refreshes, removing one sequential wait.
  • Less repeated startup for Claude and Grok. Compatible settings and context allow the next message to reuse an already prepared session. Ordinary idle sessions stay available for up to five minutes, with a limit of three per runtime.
  • Lighter recovery for long Codex conversations. Resuming a session avoids returning duplicate history that Baton already displays, while retaining the native session context.
  • Prepare tools and context in parallel. Task tools use a dedicated lightweight entry point. Independent MCP services are queried with up to four concurrent requests, matching in-flight queries share results, project context loads in parallel, and GitHub status refreshes in the background when needed.

In local macOS arm64 tests with Node.js 24, the median time from starting the task MCP entry point to having its tool list ready fell from 419 ms to 125 ms (about 70% less), with five measurements per entry point. A separate controlled test used seven local MCP services, each with a 200 ms tool-list response delay. Three measurements per approach showed a median of 1433 ms for serial queries versus 419 ms with up to four concurrent queries (about 71% less). These measurements cover tool startup and tool-list queries respectively; complete response times still depend on the model, network, and task.

Smoother file and attachment handling

  • Fixed pasting files copied from Finder or File Explorer into the AI composer having no effect.
  • Fixed file chips moving to the end of sent Codex messages when the text contained line breaks or extra spaces, preserving the composer's text and attachment order.
  • Inline paths, Markdown file links, and file:// links now share one handler, supporting Chinese characters, spaces, relative paths, and ~/ paths. Supported text files open in the built-in viewer; other permitted files open in the system default app. Files outside the workspace are revealed in the file manager, and failures show a notice.
  • Exported Markdown transcripts list file, image, and directory paths beneath the corresponding user message, with labels for temporary or missing files.

Workspace and status fixes

  • New tasks in Local mode reuse the project's existing Local workspace and open a new AI tab, reducing duplicate workspaces.
  • Scheduled tasks in Local mode also reuse existing workspaces. Tasks targeting a busy directory are held for user handling under the existing rules.
  • Agent runtime download progress remains visible in a toast when switching pages. Failed downloads can be retried, and Settings reflects the current progress when revisited.
  • Signed-out Claude Code users get a copyable CLI login command and guidance to restart Baton after login, in both Settings and the model picker.
  • Fixed a workspace potentially remaining stuck on “Waiting for task completion” after a Claude error.

Check for updates in Baton, or download it from hecara.com.

Baton Desktop 0.2.0 — macOS (Apple Silicon) & Windows

0.2.0 marks the first official Windows (x64) release, reworks the workspace task model with parallel sub-tasks in temporary worktrees, launches the official Baton AI Cloud service, adds support for GPT-6.1-Sol and Sonnet 5.5, and brings extensive performance optimizations and design system consistency.

Windows First Release

Windows (x64) is now released alongside macOS (Apple Silicon) as a 0.2.0 stable build (Linux is not included in this release).

  • Installation & System Integration:
    • Modern NSIS one-click installer: single-user installation without UAC elevation prompts, launching immediately upon completion with a Microsoft YaHei UI interface.
    • Automatically registers the baton:// protocol handler and thoroughly cleans up registry entries on uninstall.
    • High-resolution colored system tray icon customized for Windows (clearly visible on dark taskbars), supporting left-click to restore and focus the main window.
    • Window close protection: prompts a native confirmation dialog if background terminal jobs, AI generation, or scheduled tasks are still running (prompts only when terminals are actively busy; idle shells do not block closing).
    • Fixed Windows system notifications occasionally failing to activate or focus the application window when clicked.
    • Hardened workspace, dependency cleanup, and skill tool sandboxes against cross-drive (e.g. D:\) and UNC shared path traversal; unified the dangerous executable file denylist (.js, .vbe, .hta, .jar, .url, etc.) across link opening and tools.
  • Modernized Terminal & Console Experience:
    • Full adaptation for Windows ConPTY character reflow; supports Ctrl+Shift+C and Ctrl+C (when text is selected) for copy, Ctrl+V/Ctrl+Shift+V for paste, and a right-click context menu (Copy/Paste/Select All).
    • Quick-launch commands submit with a standard carriage return (\r) instead of \n, fixing commands stalling in cmd/PowerShell without executing.
    • Accurately detects whether terminal tabs are running foreground processes to prevent false idle status and command overwrites; accurately tracks cmd working directory via OSC 7.
    • When focus is in the terminal, keyboard chords such as Ctrl+W (delete word), Ctrl+B, Ctrl+R (history search), Ctrl+_ (undo), and Ctrl+1/2/3 are forwarded directly to the terminal PTY instead of being intercepted by window accelerators.
    • Global screenshot hotkeys (F1/F3/Ctrl+Shift+X) are disabled by default on Windows to avoid conflicts with system Help and VS Code; in-app F1 screenshot shortcut remains available.
    • Hides the console window for all background AI child processes (Codex app-server, OpenCode serve, Cline/Grok ACP, Git, version checks, etc.) for quiet execution.
  • Process Lifecycle & Tool Compatibility:
    • Agent termination and task cancellation use taskkill to terminate complete child process trees, preventing orphaned processes; fixed Project Run getting stuck in "running" state.
    • Added backoff retry logic for directory renames failing with EBUSY/EPERM due to Windows Defender real-time scanning locks; releases file watchers before deleting projects.
    • BYOK run_shell and start_process tools enforce UTF-8 encoding (chcp 65001), fixing broken quote escaping and garbled output; Git commits use argument arrays for multi-line messages; file edit tools (replace_in_file, etc.) support CRLF line endings.
    • Refactored Windows launcher scripts into .cmd shims to avoid PowerShell execution policy blocks and environment leakage; removed intrusive PATH modification; Node performs case-insensitive command lookups; OpenCode credentials resolve to the standard XDG directory; rejects Windows reserved device names (con, nul) or built-in commands as profile command names.
    • Injects host OS and cmd.exe syntax context into self-hosted model prompts so models avoid generating bash commands.
  • Visuals & Typography:
    • Bundles Noto Color Emoji vector font (WOFF2) on Windows, replacing Segoe UI Emoji for consistent cross-platform emoji and space icon rendering.
    • Monospace code fonts fall back to Microsoft YaHei for Chinese characters, preventing fallback to SimSun.
    • Refactored the Windows window shell with a macOS-style layered backdrop (transparent top bar and rail over an opaque base), eliminating border flickering and seam artifacts during window resizing; uses overlay scrollbars to eliminate dialog layout asymmetry.

Workspace Tasks & Parallel Sub-tasks

Baton new-task composer with model, reasoning effort and Worktree pickers
Pick a model, open a WorktreeChoose the model and reasoning effort, start in a new Worktree or an existing branch, or begin straight from an Issue or PR.
Tasks listed as Worktree branches under a project
One project, many branchesEach task maps to a Worktree branch, listed right under its project.
  • One-Workspace Multi-Task Model: Workspaces can host multiple sequential tasks, unified under a single state pipeline (running, needs review, failed); a permanent "Tasks" tab in the right sidebar displays current tasks, history, and "New task", carrying forward prior task summaries.
  • Ask Task Progress: Task cards feature an "Ask progress" button that spins up an independent, lightweight, read-only session to inspect task status without interrupting the main task state or execution thread.
  • Parallel Sub-Tasks in Temporary Worktrees: Primary agents can spawn concurrent sub-tasks in isolated temporary Git worktrees via host tools, safely merging results back into the primary workspace via three-way merge upon completion.
  • Unified Multi-Runtime Tool Support: Injects native task control host tools for Claude Code, Codex, Cursor, and BYOK; provides matching workspace task tools for Grok, Cline, and OpenCode via the local MCP Gateway HTTP Bridge.

Baton AI Cloud

  • Zero-Config AI Without API Keys: Built-in official Baton AI Cloud provider enables out-of-the-box model access without personal API keys; supports switching between Global and China direct-connect acceleration lines; dynamically synchronizes available models from the cloud; provides friendly notices for insufficient balance and rate limits.
  • Account Center Panel: Dedicated account view displaying email, avatar, connected line, credit balance, and expiration dates.

Scheduled Send

  • Composer features a split send button supporting instant send or "Schedule send";
  • Task scheduler automatically creates workspaces and dispatches tasks at designated times, restoring pending timers across application restarts;
  • Scheduling dialog disables past dates and times (past time slots grayed out for today); time picker dropdown portals to the document body to prevent viewport clipping within dialogs.

Models & Runtimes

  • Codex: Integrated GPT-6.1-Sol as the default model, bumping the codex runtime to 0.159.3.
  • Claude: Integrated Sonnet 5.5 as the default model and updated claude-agent-sdk.
  • Cline: Refreshed curated model catalog with support for new providers including Xiaomi and xAI.
  • Catalog Snapshot: Synchronized and refreshed the models.dev catalog snapshot.

Interface & Design System

  • New Workspace Composer: Replaces the floating dialog with a centered, in-pane persistent composer, with a docked tray for Local / Worktree mode and base branch selection, plus one-click cards for "Start from Issue" and "Start from PR"; placeholder reads "Describe what to do, @ to reference files, / for commands".
  • GitHub Workflow Synchronized PR Merge: Directly promotes and highlights the Merge button for synchronized pull requests, supporting non-default merge methods.
  • Control Sizing Tiers:
    • Systematic control height tiers: inline controls sm (24px), standalone buttons/dialog actions md (28px), form fields and toolbars lg (32px);
    • Standardized square icon buttons (IconButton) and icon sizes (14px inside buttons, 16px standalone); aligned auxiliary buttons beside inputs to 32px;
    • Extracted shared SearchField component aligning Archive and Requirements search styles; board "New task" button aligned to 28px.
  • Reasoning Effort Controls: Slider width adjusted to 224px with maximum level labeled "xHigh"; level label and Auto/Manual toggle aligned compactly on one row; hovering step dots displays clear level tooltips below (Low/Medium/High/xHigh), removing redundant header preview text.
  • Sidebar & Navigation: Main navigation buttons refined to 72px icon-only squares without text labels for a cleaner look; Select dropdowns wider than their triggers align to the left edge; menus use solid backgrounds and shadows; fixed asymmetric scrollbar padding on macOS with persistent classic bars.
  • macOS Branded DMG Window: New 540x400 Retina branded DMG mounting window featuring a soft brand glow, drag-and-drop indicator arrow, and bilingual instructions.

Performance & Architecture

  • Hot-Path Streaming & Persistence Optimizations:
    • Terminal tab runtime persistence (persistDetectedRuntime) updates only a single tab record row rather than rewriting the full workspace snapshot;
    • Tab index eviction reads a single column instead of scanning the full workspace store, significantly reducing SQLite I/O;
    • GitHub workflow status checks execute independent git commands in small concurrent waves, reducing main thread waiting time;
    • Elapsed-turn clock ticks entirely inside its own indicator component, preventing timer updates from triggering expensive re-renders of the full AI conversation view.
  • Schema-Versioned SQLite Storage: Each database schema version uses an isolated SQLite database file (e.g. baton-v26.db) and automatically seeds data from previous versions during upgrades, preventing database corruption across version switches.
  • Safe Workspace Archiving & Deletion: Before archiving or deleting a workspace, actively terminates running setup script process trees (such as npm install), eliminating "directory not empty" error loops caused by lingering file handles.
  • Grok Mode Switching Fix: Fixed Grok (>=1.0.9) throwing BATON_AI_ASK_READONLY_UNAVAILABLE during Ask/Plan mode transitions by adopting the ACP session/set_mode protocol.
  • Legacy Cleanup: Terminal Claude quick launch runs official claude --dangerously-skip-permissions directly, removing obsolete baton claude wrapper scripts; removed unused Claude Code Workbench IPC channels and provider CLI profiles; Doctor adds checks for Windows long path support.
  • Build System & Unsigned Windows Release: Added explicit build support for unsigned Windows releases (ALLOW_UNSIGNED_WINDOWS_RELEASE=true) alongside complete Windows automated test suites.
  • Release Infrastructure: Added release infrastructure support for introducing a new platform into an existing update channel (release backend bootstrap-target).

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com. On Windows, since this build is not code-signed yet, SmartScreen may display "Windows protected your PC"—click "More info" and select "Run anyway" to proceed.

Baton Desktop 0.1.16 — macOS (Apple Silicon)

0.1.16 lets agents generate images in the conversation, manages background tasks the same way across Claude, Grok, Codex and BYOK, and cleans up the worktree and branches when you archive a workspace.

Image generation

  • Settings › Agents adds an Image Model: pick an image-capable model from a connected provider.
  • When an agent needs an image, it calls the image tool and the result shows up in the conversation, where you can enlarge, save, reveal in Finder, or copy it. Works with Baton Agent (BYOK), Claude Code, Codex, and Cursor.
  • BYOK supports models that output images directly: select one in the composer to generate or edit images.
  • A provider's model details add a Model type: Chat model or Image model. Image models skip the availability test.

Background tasks

  • Commands Claude runs in the background are no longer killed when the turn ends; when a task finishes, Claude follows up on its own. This also fixes the empty response or "Query closed before response received" that later resumes could hit.
  • Grok also keeps its process alive while its background tasks run.
  • The background-task card above the composer now lists Codex background terminals and processes started by BYOK too, and each row can be stopped. Closing the tab asks first and stops them.

Conversation

  • Send now in the queue works for every agent: an agent that cannot take input mid-turn has its turn interrupted, then the message is sent.
  • Queued Codex messages can be edited, and editing no longer pauses the queue.
  • While a turn runs, the main button is Send when there is text and Stop only when the composer is empty.
  • The Fast Model can be pinned to a reasoning level.
  • Answer text gets more line and paragraph spacing, and inline pills are lighter.
  • The per-turn changed-files card gains Show less, and one oversized file no longer marks the whole card incomplete.

Workspaces

  • Archiving a workspace now deletes its worktree, local branch, and remote branch by default. Dependency cleanup also covers nested node_modules and similar folders in monorepos.
  • Switching the target branch opens a command palette: search, ↑↓ to choose, Enter to apply. Branches already deleted on the remote are hidden.
  • Setup script output shows in the Run Dock, and a failed setup no longer turns the workspace icon red.
  • Opening a config file written by a newer Baton shows a single notice and never rewrites the file.

Interface

  • Buttons on sidebar rows get a darker hover, and button labels and navigation text use regular weight.
  • Board cards drop the task status pill.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.15 — macOS (Apple Silicon)

0.1.15 adds Claude Opus 5.5 and GPT-6-Sol / GPT-6-Luna, upgrades every bundled Agent SDK, and reworks provider settings: model pickers become dialogs, and the auth header now follows the API protocol by default.

Models and Agents

  • Claude Code: adds Opus 5.5 (1M context). Sonnet 5 and Opus 4.7 gain the xhigh and ultracode effort tiers.
  • Codex: adds GPT-6-Sol and GPT-6-Luna, and new sessions default to GPT-6-Sol. GPT-5.4-Mini is retired and removed from the list; a session that still had it selected switches to the default model the next time it opens. The recommended utility model is now GPT-5.6-Luna.
  • Every bundled SDK and managed CLI moves to its latest version: Claude Agent SDK, Codex, OpenCode, Cursor, Grok, and Cline.

Baton Agent (BYOK)

  • With the Anthropic Messages API, the auth header setting now actually takes effect: chat requests and the connection test send the same header.
  • A custom provider's auth header defaults to Auto, which picks the header that matches the API protocol. To set it by hand, open Advanced.
  • When a custom provider's connection test fails authentication, Baton tries the other header styles; if one works, it is saved automatically and you get a notice.
  • Fetch models opens in its own dialog instead of inside the model card.
  • "Install as terminal command" is removed. Terminal commands can still be created on the Profiles page.

Settings

  • Default model and utility model share one dialog: pick a provider, then a model. The utility model button shows only the model name.
  • In the connected-provider list, each row now has a switch that controls whether the provider is used in Baton AI; the provider page no longer repeats this setting. Provider icons in the list sit on a rounded tile.
  • The "live model discovery is unavailable" banner and the empty model-list hint are gone.
  • The Run Dock drops its shadow in favor of a subtle outline.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.13 — macOS (Apple Silicon)

0.1.13 upgrades Grok to 4.7, and when the same Baton Agent (BYOK) model has inconsistent specs across multiple public catalogs, you can now pick one catalog record to fill them in.

Grok

  • The managed Grok CLI moves from 1.0.36 to 1.0.40. New sessions default to Grok 4.7, and Grok 4.7 Fast is now listed. Grok 4.6 and Grok 4.5 remain available.
  • Grok Composer 2.5 Fast is retired and removed from the list. A session that still had it selected switches to Grok 4.7 the next time it opens.

Baton Agent (BYOK)

  • When fetching models, if the same model ID has different context length, max output, or capabilities across public catalogs, you can pick one catalog record to fill those fields. The default keeps only the fields they share, and the current connection is left unchanged.
  • A model ID can be typed, or chosen from the fetched list.
  • If an availability test receives a web page instead of an API error, that HTML is no longer pasted at the bottom of the model page. The failed state still shows next to the title.

Settings

  • The two provider tabs swap places: Agents orchestrators on the left, Baton Agent (BYOK) on the right.
  • The model page header — name, test, and save — sits in the same bordered card as the other settings sections.
  • The line "Testing is optional; you can save directly" is gone.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.12 — macOS (Apple Silicon)

0.1.12 removes two blockers for BYOK behind third-party relay gateways, fixes Cline not running at all on macOS, upgrades every agent SDK and managed CLI, and adds an About page to Settings.

BYOK

  • Claude Code's [1m] model spelling is understood: a model id like claude-fable-5-1[1m] now has the suffix stripped and the anthropic-beta: context-1m-2025-08-07 header sent, instead of the suffix going out as a literal model id. Gateways that only serve 1M context used to answer HTTP 400 "enable 1M context and retry". The change covers chat, the availability test, structured output, and the prompt optimizer alike.
  • Relay gateways that only accept Claude Code clients (anyrouter-style new-api sites) reject Baton's requests. Baton does not impersonate Claude Code; instead, when the availability test fails on such a gateway it leads with a plain explanation: the gateway only accepts Claude Code clients, so use the Claude Code runtime with ANTHROPIC_BASE_URL pointed at it. The raw provider error stays visible underneath.

Agent runtimes and SDKs

  • Fixed Cline failing to install or run on macOS: the CLI binary Cline publishes ships with an invalid code signature, and Apple Silicon kills it before it starts (exit code 137), so Baton's install check could never pass. The installer now verifies the signature first and ad-hoc re-signs only when it is invalid; validly signed binaries such as Codex and Grok are untouched, and the SHA-256 check on the downloaded archive is unchanged.
  • Managed CLI upgrades: Grok CLI 1.0.36, Codex 0.154.0, OpenCode 1.18.31, Cline 3.0.62.
  • SDK upgrades: Claude Agent SDK 0.3.275, Codex SDK 0.154.0, OpenCode SDK 1.18.31, plus Vercel AI SDK 7.0.105 and the BYOK provider adapters. The new Claude Agent SDK freezes the system prompt for a whole session by default; Baton explicitly opts out so per-turn context such as project-group goals and mode switches keeps reaching Claude.

Settings

  • New Settings → System → About page showing the app icon, version, and build number.
  • Website and changelog links open in the current language: Chinese opens hecara.com/zh/…, every other language opens the English pages.
  • New "Follow us" row that opens @BatonAgent on X.
  • Contact is now "Send email", which opens your mail client addressed to [email protected]. Previously the mailto: link was blocked by the external-link allowlist with no feedback; it is now allowed, and a toast reports it if the mail client cannot be launched.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.11 — macOS (Apple Silicon)

0.1.11 is a consolidation release for interaction modes and agent capability: interaction modes collapse to Agent / Ask / Plan with per-action approvals removed, every turn now carries a project overview and live branch context, MCP tools are admitted by their read-only annotation, Codex interruption and verification are steadier, and the terminal, GitHub workflow, and BYOK image support are all rounded out.

Agent / Ask / Plan: three interaction modes

  • Interaction mode is now the only policy switch; the per-action Auto approval tier is removed end to end, including the "tool approval" row in Settings.
  • Agent mode never interrupts: Codex uses approvalPolicy: never + dangerFullAccess (i.e. --yolo), Claude uses bypassPermissions, OpenCode allows everything and answers always automatically, and ACP runtimes auto-allow.
  • Ask and Plan are read-only by each runtime's own mechanism — Codex's read-only sandbox, Claude denying inside canUseTool, OpenCode deny rules, ACP cancelling non-read requests — not by prompt instruction.
  • Network access stays available in all three modes: read-only no longer means offline, so Ask and the Plan planning phase can fetch docs, reach MCP endpoints, and run git fetch; the network posture follows the /permissions preset.
  • The "+" menu now shows a "Mode" section header above the Agent / Ask / Plan radio group.
  • Follow-up messages queued by an older build that still carried the removed Auto tier are normalized and kept on reload instead of silently disappearing.

The AI knows more about your repository

  • Every turn carries an auto-detected project overview: package manager, package.json scripts, ecosystem marker files, and top-level directories, capped at 1.5KB.
  • The workspace's current branch, base branch, and target branch come from the live workflow status, with the session snapshot only as a fallback; a non-git workspace says so explicitly.
  • New read-only git_log tool (bounded entry count, injection-safe arguments).
  • list_files, find_files, and search_files accept an offset and return nextOffset when the result cap truncates, and report whether depth limited the walk along with total counts.
  • The skill index lists at most 15 entries with an explicit overflow count, truncated descriptions, and user labels.
  • The grep_files alias is removed.

MCP and network access

  • MCP tools are classified by the server's declared readOnlyHint: tools declared read-only are listed in Ask and execute in Plan; unannotated tools stay mutating. openWorldHint no longer vetoes.
  • The built-in web_fetch joins the read-only tools; git_fetch stays mutating (it writes .git).
  • Tool cards no longer show encoded mcp__<hex>__<hex> names — they read as "server / tool", for example exa / web_search_exa.
  • Full Auto no longer adds an extra gate for MCP tools, and a disabled tool returns a readable refusal.
  • Claude Code loads MCP servers itself, so Ask and Plan previously denied every mcp__ tool; the ones declared read-only now work.

Codex

  • Agent mode maps to --yolo (approvalPolicy: never + dangerFullAccess with network); Ask and Plan still force the read-only sandbox.
  • Stopping is cleaner: Stop now awaits turn/interrupt and turn/completed (bounded) before releasing the run, thread/resume retries a busy writer with backoff, and the follow-up prompt no longer fails with already has an active writer; a Stop that outruns turn/start still interrupts the server-side turn.
  • The app-server now answers each request id exactly once, so no duplicate response is sent.
  • The verify lint check runs a real check: the workspace's own package.json lint script when it defines one, otherwise npx eslint . --max-warnings=0 when an ESLint config exists, otherwise an honest skip. A read-only run (Ask, and the Plan planning phase) never runs the workspace's own lint script — it may carry --fix and write files — and keeps only the non-fixing fallback, with the reason stated.

Terminal and GitHub workflow

  • Rename the session branch straight from the branch chip in the header (dialog plus context-menu entry).
  • The GitHub workflow gains an explicit push action showing the destination and sync state, tracks the PR head, moves the branch label inside the split button, and supports multiline tooltips.
  • While that session's AI turn is running, every workflow action shows the disabled "waiting for task" state (the old Create PR queue bypass is removed); the busy spinner inherits the button's ink and the Archive action uses solid violet emphasis.
  • Fixed the rename-branch dialog: if the branch changes elsewhere while the dialog is open (auto-rename, another window), saving no longer renames the new branch back to the old name — the field and Save are disabled and the dialog says the branch changed.
  • Fixed a worktree session where you had checked out another branch yourself: renaming it overwrote the Baton-generated baton/<slug> record, so archive cleanup could no longer delete that branch.

BYOK

  • Image attachments are no longer dropped silently: unsupported or failed images surface an explicit error; the new read-only view_image tool feeds pixels through the model's vision channel; image history is kept by message id so attachments don't leak across turns.
  • If a prior message's image attachment was deleted, or the conversation moved to a text-only model, the attachment is skipped and the text is kept — every later plain-text turn in that conversation no longer fails.
  • read_file can read SVG again (SVG is XML source; it was wrongly redirected to view_image).
  • Saving a model no longer requires passing a tool-calling smoke test first, and stale verified state is cleared when the model id changes.
  • Only worktree-mode sessions treat an empty workspace as unavailable; a local folder may legitimately be empty.

Fixes

  • Composer: the caret now lands after a freshly inserted attachment or @mention chip instead of one chip early.
  • The elapsed-turn timer no longer sticks at 0.0s while the model is only reasoning.
  • Settings: provider name edits are a local draft committed on blur or Enter, and an empty name is never committed; a validation failure on save becomes a readable provider/field summary instead of raw zod JSON.
  • Startup presentation: before the React bundle finishes loading, the window shows a splash with a centered Baton logo — translucent over the native vibrancy on macOS, opaque elsewhere — following light and dark mode and draggable like the window chrome; auxiliary floating and capture windows no longer flash it. The header row's background is also continuous again when the sidebar rail is collapsed.
  • Retired preset models migrate automatically: GPT-5.4 is retired from Codex, so a conversation still on it switches to the default Codex model (GPT-6-Astra) and gets a "the original model is no longer available; switched to the default model" divider; the reasoning effort is clamped to what the new model allows, and retired entries no longer appear in the model lists.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.10 — macOS (Apple Silicon)

0.1.10 is an upgrade release: Codex can now use OpenAI's latest GPT-6-Astra, every built-in agent runtime is updated to its current version, switching models mid-conversation is called out explicitly, and the terminal gains a per-tab zoom control.

GPT-6-Astra in Codex

The Codex model picker now offers GPT-6-Astra (gpt-6-astra), OpenAI's new flagship released on 2026-09-04, and makes it the default Codex model for new conversations (existing conversations keep the model they were started with). Default reasoning effort is low, with low / medium / high / xhigh / max selectable, alongside support for the Fast (priority) speed tier. It requires the managed Codex runtime 0.153, which Baton downloads automatically.

GPT-5.4 is no longer served by Codex and now shows as unavailable; the entry is kept only so older conversations still resolve their model id.

Built-in agent runtime updates

  • Claude Code 2.1.261 (Agent SDK 0.3.261)
  • Codex 0.153.4
  • OpenCode 1.18.29
  • Cline 3.0.61
  • Grok CLI 1.0.21
  • Cursor SDK 1.0.31

Managed runtimes are downloaded and verified by Baton. After upgrading, the new version is fetched automatically the next time you use that agent; nothing needs to be installed by hand.

AI conversation

  • Switching models within the same agent now inserts a hairline "Model changed from A to B" divider in the conversation, with an info tooltip explaining the trade-offs: the context cache is invalidated, more tokens are consumed, and earlier context may be compacted. The switch itself is silent — it no longer auto-sends a [system] Switched model message that wastes a turn.
  • GitHub PR links (github.com/<owner>/<repo>/pull/<n>) clicked inside an AI conversation now open in the built-in PR reader tab instead of the browser; every other link still opens externally. This works from detached floating tabs too.
  • File attachment chips in the composer and sent user messages are narrower (max 160px), keeping long lists readable.

Terminal

  • The right sidebar's "Activity" tab is now "Terminal control", appearing for every terminal tab. It starts with a per-tab zoom row (zoom out / percent / zoom in across 8 steps from 70% to 175%) that scales only that terminal's font; the setting lives purely in memory and is never written to Settings. When Claude Code is detected, its activity timeline still shows below it.
  • Fixed a false "agents still running" warning when archiving a workspace or closing a tab: only AI chat tabs with an in-flight turn count as busy, and terminal tabs no longer trigger the warning.

UI polish

  • Run Dock: the collapsed dock in the right sidebar is now an iOS-style translucent glass capsule floating above the sidebar bottom; expanding it grows that same capsule into a glass panel, and a running process tints it green with a solid Stop button.
  • Toasts: uniform-width cards stacked Sonner-style in the bottom-right corner — the newest sits in front with two peeking behind; hovering expands the stack and pauses auto-dismiss.
  • Fixed the Turn Review diff not scrolling once it finished rendering (Scroll now re-measures content inside shadow roots).

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.9 — macOS (Apple Silicon)

0.1.9 is an upgrade release: Claude Code can now use Anthropic's latest Fable 5.1, every built-in agent runtime is updated to its current version, and the user message bubble and reading size in AI conversations are refined.

Fable 5.1 in Claude Code

The model picker now offers Fable 5.1 (claude-fable-5-1), Anthropic's most capable publicly available model. It ships with a native 1M context, so there is no separate 1M variant to pick, and it supports the full reasoning ladder including the top ultracode tier.

Built-in agent runtime updates

  • Claude Code 2.1.257 (Agent SDK 0.3.257)
  • Codex 0.152.0
  • OpenCode 1.18.26
  • Cline 3.0.60
  • Grok CLI 1.0.15
  • Cursor SDK 1.0.30

Managed runtimes (Codex, OpenCode, Cline, Grok) are downloaded and verified by Baton. After upgrading, the new version is fetched automatically the next time you use that agent; nothing needs to be installed by hand.

Conversation polish

  • User messages are now right-aligned rounded bubbles with their own fill color, no longer sharing the button hover color, tuned separately for light and dark themes.
  • Conversation prose (answers and thinking) moves from 15px to 14px; the rest of the app keeps its existing sizes.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.8 — macOS (Apple Silicon)

0.1.8 is a fix release: it restores conversations on custom models (BYOK), makes terminal tabs open faster, and polishes caret placement, pasting, and alignment around mention chips in the composer.

Custom model conversations work again

In 0.1.7, every provider configured as a custom model (BYOK) failed on the very first message — after the underlying AI SDK moved to v7, it no longer accepts a system prompt mixed into the message list. The system prompt is now passed through the SDK's dedicated option, and BYOK providers work again on both the OpenAI and Anthropic protocols. If a message errored out the moment you sent it in 0.1.7, upgrading fixes it.

Terminal tabs open faster

Opening a new terminal tab no longer waits for every Claude Skill to be copied and checked before the shell starts. That step now runs in the background, so the terminal is usable immediately; only launching Claude Code itself waits for it to finish.

Composer fixes

  • Fixed the caret landing in the wrong place when clicking around a mention chip (file, folder, or image), and text pasted before a chip appearing after it.
  • Fixed an invisible character leaking into drafts and final prompts after drag-selecting across a chip, copying, and pasting the text back.
  • Spacing between a chip and the surrounding text is now owned by the editor, so a chip at the start of a line lines up with normal text.

Workspace setup feedback

Workspace setup (dependency install) progress no longer takes up its own area in the UI. It appears as a single toast with a loading state that updates in place to the result, with the log one click away.

More

  • Terminal tabs now show a pointer cursor on hover.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.7 — macOS (Apple Silicon)

0.1.7 makes Claude Code work out of the box and unifies sign-in status for Codex and Claude. Japanese UI support ships, attachment display and message queueing in AI conversations get refined, and a series of terminal session edge cases around start, restart, and tab switching are fixed.

Claude Code works out of the box

The composer now supports Claude Code by default, no separate install needed. Codex and Claude share the same sign-in status check: when you're signed out, the input area shows a clickable "Connect…" prompt that takes you straight to Settings to sign in.

Japanese UI

Japanese is now available as an interface language, covering menus, slash command descriptions, AI-generated titles and rewrite suggestions, date pickers, and every other piece of copy.

Attachment display

Files, folders, and image attachments in a message now render as a single row of chips, in the order you added them. Images support a hover preview.

Message queueing

  • Fixed "Send now" messages appearing out of timeline order in the queue.
  • Selecting a queued message and pressing Enter sends it immediately.
  • Fixed a brief status misread right after a turn ends that could leave a new follow-up message stuck in the Queued state indefinitely.

More stable terminal sessions

Fixed a series of issues with terminal tabs around a cancelled start, a fast restart, and switching to a backgrounded tab: leftover state from a failed start, lost output history on hidden tabs, and the exit banner appearing out of order. Session behavior is now more predictable.

Other fixes

  • Branch cleanup results after archiving a workspace now surface as an actionable toast; branches that fail to clean up can be force-cleaned.
  • Fixed an issue where, during the startup refresh of Codex/Claude sign-in status, a persistence failure for one account could affect the others, leaving their sign-in status stuck as stale.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.6 — macOS (Apple Silicon)

0.1.6 is a stability-focused release following 0.1.5. Claude conversations now work in the installed app, updates are less prone to failure, and GitHub merge along with Open in behave as you'd expect.

Claude conversations now work

In the installed version, every Claude turn failed immediately with a "Turn failed" error. This didn't show up in development mode, but it affected both 0.1.4 and 0.1.5 release packages. It's now fixed — conversations start properly after installation.

More reliable app updates

Some users saw an "Update failed" message after downloading the 0.1.4 → 0.1.5 update. We've made the download process more robust; if it still fails, the notification now offers a direct "Download from website" option.

GitHub merge behavior unified

  • PRs that are mergeable on github.com are no longer stuck as Pending and unclickable in Baton.
  • The top bar and Review page now share the same merge method (configured in Settings). The top-bar merge control is now a split button offering Squash & Merge, Merge, or Rebase Merge.
  • After archiving a workspace, GitHub buttons no longer remain stuck in a busy state.

Other fixes

  • Open in... now hides apps you don't have installed. Finder, Cursor, Zed, Ghostty, Warp, Terminal, and GitHub Desktop all open in the current working directory.
  • Setup script failures now show which command failed and what it printed, instead of just a log path and error code.
  • Text fields now show an I-beam cursor on hover, before you click in.

Baton will update automatically the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.5 — macOS (Apple Silicon)

0.1.5 is a refinement release. AI answers are typeset for reading, the pop-out window works like a real window, release notes move to the web, and dozens of everyday interactions across the app have been tightened up.

AI conversations are easier to read

  • Long answers, re-typeset. Paragraph spacing, list indentation, and heading hierarchy were retuned for reading, with separate line-height for Chinese and English.
  • One-click copy on code blocks, tables, and your own messages, with one consistent button.
  • Clickable file paths. A workspace path mentioned in a reply opens in your system's default app.

The pop-out window is a lot more useful

  • Default size grew from 480×620 to 640×760.
  • Two-line title bar — tab title plus a project › branch · mode breadcrumb — so several pop-outs stay distinguishable; collapse it to a single line when you want.
  • ⌘W closes the pop-out tab; ⌘= / ⌘− / ⌘0 zoom, matching the main window.
  • A cleaner drag preview, and a "Restore" icon in the tab bar for tabs that are already popped out.

Release notes moved to the web

"Release notes" now opens the versioned changelog on hecara.com, so every release is shareable.

Interface polish

  • Dialogs: one title size and weight everywhere; Import MCP servers trimmed to "not imported → select → import".
  • Select menus: long options marquee on hover to reveal the full text (ellipsis instead when "reduce motion" is on).
  • Target branch: scrolling inside the popover no longer closes it; candidates show just the remote ref name.
  • GitHub workflow buttons: only Merge keeps a solid green; the rest return to a neutral outline.
  • Sidebar: an archiving workspace shows a grid-dot icon with a sweep across its title; fixed tooltips flickering in sequence while scanning icons, and a tooltip flashing on menu-button clicks.
  • AI composer: attachment chips align with the text; Add / Screenshot buttons reveal on hover; a more refined card shadow.
  • Project group page: centered and narrower, clearer Objective and Workspaces count, and the inaccurate status pill is gone.
  • Projects settings: rearranged layout with the Space / Project pickers on one row, and script sections merged into a single "Workspace scripts" card.
  • Skills settings render the list immediately and fill in each skill's location in the background instead of waiting for a full scan.
  • The Local / Worktree badge in the session header is now a pill; selected settings chips no longer go bold; a few kanban and hover-card buttons were aligned to the same height.

Agent runtime upgrades

Claude Agent SDK 0.3.245 · Codex 0.149.1 · OpenCode 1.18.23 · Grok 1.0.9 · Cline 3.0.58

Baton will update itself the next time you launch it, or you can download the latest version at hecara.com.

Baton Desktop 0.1.4 — macOS (Apple Silicon)

A stability update:

  • Baton now reliably recognizes when you're signed in to Codex, Claude Code, Grok, OpenCode, and Cline. Before, different parts of the app could disagree about your sign-in status — that's fixed.
  • More dependable MCP server sync, backup, and restore.
  • Fixed a few cases where adding or merging skills didn't work as expected.

Baton will update itself the next time you launch it, or you can download the latest version at hecara.com.