Releases: akhayam99/goodboy
Goodboy v0.1.11
Goodboy v0.1.11
Cost-aware model recommendations, chat attachments that survive an agent switch, and a workflow-step crash fix.
See the price before you switch models (#797)
Goodboy already suggests when a task could run on a cheaper or stronger model. Now the suggestion carries the cost trade-off with it: pick a heavier model for light work and the recommendation shows roughly what it adds (for example, "about 2x cost"), so you decide the upgrade or downgrade knowing what it runs you. Light work flags a strong recommendation; heavier work already on an expensive tier flags an optional one. Codex and Gemini have no static pricing, so the multiplier is omitted for them.
Attachments stick across agent switches (#796)
Files you attach to the chat input used to vanish when you switched agents or restarted a session. They now write to disk on attach and restore when you come back, so moving between agents mid-task keeps your uploads. Deleting an agent cleans up its stored files.
Fixes
- Selecting a model on a workflow step no longer crashes the render when a planner produced an unrecognized agent role; unknown roles normalize on save and the render sites fall back instead of failing (#799)
Goodboy v0.1.10
Goodboy v0.1.10
The model you pick in the composer now wins over the agent's pin, workflow plans hand off cleanly in automode, attention highlighting is consistent across agent types, failure rows read calmer, and light mode gains depth.
Model selection that sticks (#794, #793)
When you picked a model in the composer and hit send, the chat could ignore you and stay on the agent's pinned model. Per-turn selection now wins over agent pins, so the model you choose is the model that runs. Scout and resolver auto-kickoffs are unaffected.
Changing the suggested model for a step in a custom workspace no longer flips that step's agent. The role was being re-guessed from the step name on every save; it now persists alongside the model. One more instance of the same pattern, in session creation, is still pending a fix.
Workflow plans tracked correctly (#788)
In automode, the next workflow step could start before the current step's plan finished saving, which lost the plan consumption count. The hand-off now waits for the plan to land in the database first. Cancelled and errored turns no longer auto-advance.
Attention where you need it (#790)
Workflow steps and resolver agents now show the same yellow border that classic agents already used to flag unread output or an agent waiting on you. All three agent types highlight consistently.
Calmer failures (#789)
A failed operations row no longer turns the whole row red with a warning icon. It shows a N success · M failed breakdown instead, failures in the error color, the rest neutral.
Light mode depth (#791)
Darker light-mode baseline and a wider elevation ramp, so stacked surfaces read with clearer depth. Borders nudged darker for present-but-subtle contrast. Foreground colors are unchanged and stay AA-compliant.
Smaller fixes
Goodboy v0.1.9
Goodboy v0.1.9
One chat across several repos, a right-sizing nudge with Fable 5 in the registry, a sessions sidebar that derives its own stage, a slimmer context panel, and a stack of fixes.
Run one chat across several repos (#777)
A workspace used to be a single repo. Now you can link several repos into one composite workspace: pick a container folder, and each session mounts every member repo as its own git worktree under a per-session directory. The agent runs with that directory as its cwd, so one chat operates on every linked repo at once. Commits and branches stay per-repo. The add-workspace dialog gains a Single project / Multi project toggle, with a repo multiselect, mount names, a container picker, and a live preview of the layout.
This is phase 1, and it ships as beta. Per-repo push, PR, and diff surfaces, composite session cleanup on delete, and a multi-repo GitHub Studio are still to come. Single-repo workspaces run the same path as before.
Right-size the model before you spend (#778)
Claude Fable 5 joins the registry (1M context). The right-sizing nudge is now a provider-agnostic engine: a heavy first turn suggests escalating to a stronger model, and an over-powered turn suggests dropping at least one tier (never down to the cheapest). Both are always overridable. The nudge reads file count, inline plan steps, and attachment count to gauge how heavy a turn is.
This release also corrects the Opus price the budget tracker used. It was a stale $15/$75 per MTok and overcounted Opus spend threefold; it now reads $5/$25.
The sessions sidebar derives its own stage (#784)
The manual status flag (the wip / waiting / blocked / done emoji row) is gone. Session stage is now derived from signals the app already tracks: agent state, PR lifecycle, CI, review decisions, open questions, unread replies. Each session shows one stage (attention, running, review, building, done) with a reason line like "PR #12: CI failed" or "2 open questions". The sidebar groups by stage with needs-you pinned on top; done, merged, and closed collapse by default. The old user_status column stays in the schema, so nothing is dropped.
A slimmer context panel (#781, #780)
The session right panel drops from four tabs to two: Context and Terminal. Open questions move into a collapsible section inside the Context tab, shown only when there are questions. Plans move out of a tab into a full-screen Plan Studio, opened from a launcher row in the Context strip (#781).
Open-question chips are now single-select: picking one answer clears the others, and re-clicking toggles it off. The questions surface also got a visual pass: depth comes from elevation instead of stacked teal borders, completion reads as a green count badge and progress fill, and code-like answer labels render mono and truncate instead of overflowing the card (#780).
Fixes
- Review comments on the resolve board group by thread instead of by reply id. Threads where the reply link is null no longer fan out into one card per comment; each thread is one card built from the principal comment, and the resolver gets the full discussion. The unresolved-comment count on the PR card uses the same grouping (#776)
- Scrolling up through a long chat no longer jumps every ~50px. Off-screen cards remember their last rendered height instead of collapsing to a fixed guess, so heights stop oscillating. The very first scroll after load may still nudge slightly (#775)
- Sessions left stuck as running after an app reload or restart now reset to idle on load, so the composer unlocks instead of locking with no way to cancel or queue. A running workflow agent resets to pending, so its step stays actionable (#785)
Goodboy v0.1.8
Goodboy v0.1.8
Multiple workspaces, each in its own window. Plus a quieter chat, document attachments, a per-comment PR resolver, and a stack of fixes.
Open every workspace in its own window (#773)
Before, one window held one workspace and a chip row let you swap between them. Switching tore down the workspace you were leaving and any agent still running in it. Now each workspace gets its own OS window, so you can keep two side by side and watch both work. A full-screen launcher opens on start with recents and search; ⌘O and the sidebar header open a switcher; opening a workspace that is already open focuses its window instead of duplicating it. The workspace cap is raised to 5.
This replaces in-place workspace switching entirely: there is no more chip row and no switch confirmation, because nothing gets torn down. Two-window use is worth a manual check before you lean on it.
A quieter chat
- Consecutive tool activity folds into one collapsible operations row, so the transcript reads clean and you drill in only when curious. Permissions, errors, and auth prompts stay inline, never buried (#759)
- The work-in-progress indicator now shimmers with copy that follows what the agent is doing (reading, editing, running, thinking) and settles into a steady state on long turns. Reduced-motion shows a static label (#771)
- Queueing a message while a turn runs no longer hides what you wrote. Pending messages stack above the composer in order; click one to edit, X to remove. Each sent message carries a footnote with the provider and model it ran on (#753)
- The chat breadcrumb uses the shared divider so its rule matches every other separator (#770)
Attach documents, not only images (#760)
Chat attachments now accept pdf, csv, tsv, txt, log, md, json, xml, yaml, docx, and xlsx. Images and PDFs preview inline; other files attach as chips. Unknown binary types are rejected, and the 15MB size limit is unchanged.
Resolve PR comments one at a time (#756, #752)
GitHub Studio gets a resolve board: each open review comment is a card with its own provider, model, and effort, plus a select box and a Resolve button. An override chip applies one config to every card, or you customize per card and batch-spawn one resolver per comment. A "won't fix" reply posts the reason and resolves the thread without a commit.
Resolve push also stopped failing in silence. The app now runs git push with your login-shell environment, so a repo pre-push hook sees the same setup a terminal would instead of throwing on a missing variable. When something does fail, it surfaces as a toast, not only a buried notification.
Every provider's models, read cleanly (#767)
Only Claude used to render properly in the model picker; Codex, Gemini, and Cursor showed raw ids and arbitrary ordering. Display metadata now lives in one registry, so each provider groups into clean rows with readable labels. Codex gains an effort control wired through to model_reasoning_effort. Switching provider mid-session no longer spawns the new provider with the old provider's model id.
Smoother first run and workflow start (#763, #764, #762)
- First launch opens a full-screen wizard: welcome, connect a provider, connect a workspace, ready. Every step is skippable, and you can reopen it from Settings (#763)
- The custom-workflow planner now asks for the process you expect (the steps), not only a goal, and the start dialog is a single master-detail rail with a preview pane (#764)
- Attaching a workflow with auto-run off now starts its first step instead of leaving it for an extra click (#762)
Open questions, reworked (#766)
Questions used to live in two copies that drifted, so answering or dismissing left the workflow gate stuck and answered questions could come back. They now read from one source: answer or dismiss unblocks the gate immediately and the question stays gone. Agents can offer suggestion chips, and the cards got a redesign with per-agent grouping and progress.
Update without quitting (#750)
The app re-checks for updates while it runs (on an interval and on focus), so a new release surfaces the in-app "restart to update" control without you having to quit and relaunch first.
Delete replaces End for sessions (#758)
End and Delete did nearly the same thing, so End is gone. The destructive action is a single Delete, with an "Archive instead" nudge in the confirm dialog for when you want to keep the history. Delete removes the worktree, not the branch.
Fixes
- Codex installed through
npm install -gis now detected, including under nvm/fnm, instead of showing as not installed (#765) - The embedded terminal sizes its PTY to the fitted view, so the shell prompt renders at the right width and stays aligned on resize (#755)
- Running a plan no longer spawns a duplicate, orphaned agent for the next step (#754)
- A queued turn firing as the previous turn ends no longer crashes the turn; the start-workflow modal got sizing and alignment polish (#768)
- Large diffs no longer freeze the viewer: it renders the first 1000 lines with a "show more" bar for the rest (#772)
- Wiping the local database now also clears leftover UI state, so nothing references a dead workspace (#769)
Goodboy v0.1.7
Workflow Studio, rebuilt
Build a sequence of agents once, then run it on any session. The composer is now a horizontal flow that reads left to right: drag steps in from the library, reorder them by the grip handle, edit a step inline below the flow. The panel matches the Budget and Provider studios, with the live workflow name in the header and Save always in reach. (#746, #747)
Run the same workflow more than once
A workflow used to collapse onto one attachment per session, so you could not run it twice. Now each attach is its own run: plans, the open-question gate, and auto-run are tracked per run, and the same workflow can run several times in one session without the instances bleeding into each other. (#747)
Plans reach the step that does the work
A workflow built as plan then a generic agent left the plan stuck on active forever, because plan handoff was wired to the implementer kind alone. A generic or debugger step placed after a plan step now receives the plan body and marks it consumed. Scouts, reviewers, testers, and docs steps pass it through to the first real executor, so a plan then review then implement sequence consumes the plan at the implementer, not the reviewer. Agents you spawn by hand still need explicit context, so they will not grab the active plan. (#717)
The empty Workflow Studio explains itself
First-time visitors got a one-line hint and no sense of what the page was for. The center pane now lays out the value, maps three steps to the panels around it (presets on the left, step library on the right), and gives you a New workflow button. The copy adapts to first run versus returning. (#744)
Parallel scouts
A scout can map the macro-areas of a large codebase, then spawn one sub-scout per area. They run concurrently and read-only, and the parent consolidates their findings into one report. The sidebar shows the hierarchy as a tree, with cost rolled up across the whole subtree. Sub-scouts inherit the parent's model, so a haiku scout spawns haiku children with no surprise spend.
This is off by default. Turn on Scout exploration per workspace to enable it; with it off, a heavy search shows an in-chat nudge instead. Depth is capped at 2, with up to 6 children per split, and simple tasks stay single-scout. (#745)
Batched review-comment resolution
Resolving N review comments fired N pushes, each kicking off CI and webhooks on the PR. The resolved-comment chip now offers Mark solved (push later), which queues the resolution with no git call, next to the old push-and-resolve-now. A Push & resolve (N) button in the context rail publishes the whole queue with a single push, then replies and resolves each thread; threads that fail stay queued for retry without re-pushing.
Two limits in this version: there is no success toast, so the strip disappearing is the signal, and a stale SHA after a rebase or squash is not yet guarded. (#743)
Sessions and studios
- Open the session behind any studio: GitHub, Budget, and Linear studios now carry one shared Open session control, and a session's Linear chip opens the in-app studio focused on that issue (#715)
- Archive session is a first-class action in the kebab menu, with a
⌘⇧Ashortcut and a confirm dialog that spells out the action is reversible (#712) - The pick-agent empty state shows the agent count as one large numeral instead of a row of silhouettes (#718)
Fixes
- Session title no longer changes when you spawn a second agent; only the founding agent sets it (#714)
- Switching agents lands the chat at the latest message instead of the top (#713)
- A PR opened outside the app reconciles into the GitHub inbox instead of staying stuck on "No PR yet" until a reboot (#716)
Goodboy v0.2.0-rc.5 (Windows + Linux)
fix(desktop): robustly resolve npm shim node target on windows rc.4 still hit "batch file arguments are invalid": node-direct fell back to the .cmd because the shim parser was too strict (only quoted %dp0%/%~dp0 tokens), so a multi-line --append-system-prompt failed through cmd. Scan every quote/whitespace token ending in .js, strip %dp0%/%~dp0/%CD%, and resolve against the shim dir or as an absolute path. Route qualified .cmd paths through the same logic. Log the resolved target (or the shim head on failure) so a still-unsupported layout is diagnosable from the app log. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Goodboy v0.1.6
Goodboy v0.1.6 "Terminal"
Patch release on top of v0.1.5. A multi-tab terminal in the context panel, a full-screen Budget Studio for spend, API-key auth next to CLI login, real provider brand marks, and the new mascot.
Multi-tab terminal (#710)
The context-panel terminal runs multiple tabs now: spawn as many as you need, each with its own PTY, and switching tabs replays the buffer instead of dropping it. A session-close PTY leak is fixed. No backend changes. The same overhaul modernized the chat view (user messages and step transitions render markdown, scroll-aware top fade, smooth jump-to-latest) and brought the Workflow, GitHub, and Linear studios onto the Budget Studio layout.
Budget Studio (#708)
The cramped pricing dialog is gone. Budget Studio is a full screen for spend across the whole workspace: an overview with per-provider bars, a by-model table, a cost-per-turn sparkline, and a paginated turns table, plus a left rail to scope down to any single provider or session. Budget-aware routing and the monthly cap still run; the cap is read-only in this view (the editor UI was dropped).
API-key auth, alongside CLI login (#704)
You can authenticate a provider with an API key instead of a CLI login, per workspace. Keys for Claude, Cursor, Codex, and Gemini are stored in the OS keychain and injected as the provider's env var at spawn, so the secret never reaches the frontend. Bind a key to a workspace and it runs even with no CLI logged in. Keys are validated before save, except Cursor, which has no cheap endpoint to check against.
Provider brand marks (#705)
Provider Studio shows each provider's real product mark now (Claude, Cursor, Codex, Gemini) instead of the generic placeholder icons.
New mascot and chat empty states (#703)
New Goodboy mascot across the app and website, regenerated app icons, and redesigned chat empty states: a large role-tinted silhouette when an agent is focused, and a row of the specialist dogs when you're picking one.
Also
- Desktop copy got a tone-of-voice pass (#707).
Notes
- macOS universal
.dmg, signed and notarized (personal team M3R9H4QX65). - Auto-update: installs on v0.1.5 get the "restart to update" control.
Goodboy v0.1.5
Goodboy v0.1.5
Patch release on top of v0.1.4. Headline: the terminal and provider setup got a real overhaul. Plus workflow/cluster polish and a stack of fixes.
Main feature — login-shell terminal + Provider Studio (#681)
The embedded terminal now runs as a proper login shell, so it picks up your real environment (PATH, shell config, the tools you actually have installed) instead of a stripped-down one. On top of that, Provider Studio: one place to install, connect, and manage each provider, one account per provider with a single global login. Comes with accessible, colored quick-action icons and a subtle pulse nudge on the providers entry. (Multi-account-per-provider was explored and deliberately dropped: Claude is bound to the macOS keychain and per-account HOME isolation broke it.)
Workflow & cluster polish
- completed-workflow chip + collapsible clusters (#697): a finished workflow swaps its step count for a "completed" chip and hides the autorun/reorder/discard actions; the per-implementer cluster group is now collapsible and collapsed by default, so completed implementation steps stop cluttering the view.
- goal slot reprocessing (#698): when a workflow is attached, the goal slot is re-derived via a cheap one-shot pass that strips step-owned procedure, so the planner stops opening PRs too early.
Fixes
- push before resolving a review thread (#699): the push now happens first, so resolving doesn't race ahead of the actual commit.
- script-run feedback restored in the overflow menu and composer (#696).
- approval mode: correctly shown as not enforced for Cursor and Gemini (#690); session permission mode is respected even when rule loading fails (#685).
- worktree branch names starting with a dash are rejected (#686).
Under the hood
- Cargo lockfile is now committed and a Rust fmt/clippy/test CI workflow runs on backend changes (#688, #692); release workflow actions pinned to commit SHAs (#689).
- Removed a debug
eprintlnfrom the provider/turn paths (#687); dropped unused GitLab/Atlassian CSP hosts (#684); removed a stale roadmap doc (#683). - Marketing site: copy polish + responsive/mobile actions (#700), LinkedIn footer link (#695), interactive self-playing feature mockups (#691), Google Tag Manager (#694).
Notes
- macOS universal
.dmg, signed + notarized (personal team M3R9H4QX65). - Auto-update: existing installs get the "restart to update" affordance once published.
Goodboy v0.1.4
Goodboy v0.1.4
Patch release on top of v0.1.3. Headline: the implementation step now splits into per-cluster sub-agents driven by the plan. Plus a batch of workflow-studio polish and hotfixes.
Main feature — substep clusters in implementation (#675)
The planner now emits execution clusters, and the implementer step fans out into one child agent per cluster instead of grinding through everything in a single pass. Each child is pinned to the implementer kind, and the review step stays locked behind cluster-done markers so it can't start until every cluster has actually finished. The parent container rolls up the cost of all its sub-agents, so you still get one number to look at.
Ships migrations m047/m048 (agents.parent_agent_id, session_plans.clusters_json).
Also new
- discardable workflows + collapsible workflow rail (#679): drop a workflow you don't want, and collapse the rail to get the space back.
Fixes & polish
- workflow step block messages now tell you the real reason a step is gated. A step blocked by a still-running summarizer used to claim "open questions need resolution" even when there were none. Now the block reason is tracked explicitly (questions vs summarizer) with the matching message, button label and tooltip, trimmed to the point. (#677, #678)
- cmd+r reloads the app again. (#676)
- slot-history button restored for summarizer-written slots (decisions / last_output_summary). History rows existed in the DB but never hydrated the store, so the button never showed and old versions were unreachable. Also keeps the goal slot high-level: the cheap model no longer folds per-turn status, counts, or file paths into it, and an already-polluted goal self-heals back to clean intent. (#674)
- gh commands run off the main thread, so the UI no longer stalls on GitHub calls. (#673)
- linear studio section added to the marketing site. (#670)
Notes
- macOS universal
.dmg, signed + notarized (personal team M3R9H4QX65). - Auto-update is wired: existing installs get the "restart to update" affordance once this is published.
Goodboy v0.1.3
Goodboy v0.1.3
- Linear Studio — launch a session straight from an assigned Linear issue: grouped issue inbox, goal + branch prefilled, and adopt-the-existing-PR-branch so the existing PR links to the new session.
- Per-workspace GitHub tokens — each workspace resolves its own gh token (workspace token → global → system gh), so multi-org setups (e.g. SSO) resolve PRs correctly. Connect per-workspace in Settings → Integrations.
- Adopt existing branches (reuse session or erase + recreate on conflict); various GitHub/PR-linking fixes.
Signed + notarized universal macOS .dmg.