Repository navigation
The first published release of que: Claude Code sessions in git worktrees, terminals that outlive the app, and quiet hours that keep you out of them when you need focus. Builds are unsigned for now; the README has the first-launch steps. 0.1.0 was only built locally, so everything since it is listed here.
Added
- Refresh on the review pane's Pull requests list checks each pull request with GitHub at once instead of waiting for the next poll; inside a pull request it also fetches the conversation and files again. The icon turns while it works, a failed check shows gh's message under the list's head, and refreshes started together from the app and the CLI share one check.
que ws pr <workspace> --refreshchecks with GitHub too. teardown_timeout_seconds(default 60): how long a repo's teardown hook may run when a workspace is removed before it is killed and recorded as timed out.- While a workspace is being removed, its card lists the removal's steps under
[ REMOVING ]: each finished step with how long it took or why it failed, the one running now with a clock that ticks each second, and those still to come. - The daemon watches the worktree of every workspace a window shows (
workspace.watch,workspace.unwatch) or has an attached terminal in, and sendsworkspace.changedwhen its files, index or commits change, at most once per 300 ms. workspace.fileslists a worktree's tracked and untracked files,workspace.readFilereads one of them (text capped, binary detected, never outside the worktree), andque ws files <workspace>prints the listing;--json.- A Files tab in the review pane: the workspace's files as a tree, changed files marked as in Changes and their directories open with a count; a changed file opens its diff, any other file opens read-only as a tab beside the terminals.
workspace.difftakes abaseto compare against and acommitto narrow the files to that commit's own changes, and returns the branch's commits and the refs worth comparing against.que ws diff --base <ref>and--commit <sha>; the text output lists the branch's commits with their age.- Two menus in the Changes header:
Commits nlists the branch's commits and narrows the files to one commit's changes, andvs basecompares against another branch, remembered per workspace. que ws pr <workspace>: a workspace's pull request with each check (state, workflow, how long it took) and its conversation, comments, reviews and line comments oldest first;--jsonand--refresh.- The daemon keeps every check run behind a pull request's checks, so a finished check updates the workspace, and answers
workspace.prThreadwith the conversation, cached until the pull request changes. - A review pane at the right of the window with two tabs: Changes, the files a workspace changed, each opening its diff as a tab beside the terminals; and Pull request, its checks and conversation. Drag to resize; the pane and its tab are remembered.
- Tickets know their epic: the queue groups tickets under their epics, a started ticket's brief carries the epic's overview, and
que tickets listprints the tree. - Filter the sidebar with
⌘K: sessions, projects and workspaces narrow as you type, and so does the tickets list; sort projects by name or last activity from the Projects head. - A Changes view for a workspace: what it changed against its base, file by file with the patch, committed and uncommitted, read-only.
que ws diff <workspace>andworkspace.diff: what a workspace changed against its base, committed and uncommitted, file by file with patches.- Split a workspace's terminals in two: ⌘D beside, ⌘⇧D below, ⌘⌥ arrows to move between panes, or use the split and join buttons in the top bar; drag the divider; the layout is remembered and both panes reattach after a relaunch.
- A Tickets view in the app: the tickets assigned to you, Start on each (asking which project the first time), and the workspace it made; the start prompt and the sync filter are in Settings.
- The tickets view groups tickets under their epics, with subtasks beneath theirs; epics are overviews and have no Start.
- A ticket queue:
que ticketslists the tickets assigned to you from the tracker,que tickets start KEYmakes a workspace for one under its project (learned the first time you choose), writes the ticket as a brief and starts claude on it. npm run install:localbuilds que from your checkout, replaces/Applications/que.app, links thequecommand and reopens the app, leaving the background service and every terminal running.- The daemon reports the build it runs (
buildIdindaemon.ping);que daemon statusandque doctorshow it beside the build this que would start and say when they differ. - When the background service runs an older build than the app, an Update control appears beside Settings in the sidebar. It hands every terminal to the new build and keeps them all running; if that is refused, the service keeps serving as it was and the error line says why.
que daemon restartstops it and starts the current build, ending every terminal. - The window says when it is reconnecting to the background service, and comes back on the same workspace with its terminals reattached, or a fresh shell where they ended.
- Claude sessions come back after the background service restarts: each workspace terminal that had a live session reopens and resumes it where it left off. Sessions Claude ended and terminals you closed stay closed, and during locked quiet hours they wait for the unlock.
que daemon upgradeswaps in the newly installed background service without ending any terminal: shells, their screens and scrollback move to the new daemon under the same ids, and if the new one cannot start, the running one keeps serving them.que daemon statusandque doctorrecommend it beforeque daemon restart.- The morning report,
que reportand the morning summary now cover interactive sessions: per workspace, time working, needs-input moments, whether it is still waiting, commits ahead of base, and the pull request. - Pull request tracking: every workspace's PR state (draft, open, merged, closed; checks; review decision) is refreshed from GitHub and shown in
que status(the app side arrives separately). - The sidebar is resizable: drag the divider (180 to 520px), double-click it
to reset, or use the arrow keys when it has focus. The width is remembered.
The app's own data (such as this) now lives underQUE_HOME/app, so a test
QUE_HOMEisolates it too. - Right-click a project or a workspace in the sidebar for its actions (the ⋯
button offers the same). Projects can now be removed from the app; their
workspaces go with them, worktrees deleted and branches kept.
Changed
npm run releaseprepares a release pull request from arelease/<version>branch: it runsnpm run verify, moves the[Unreleased]notes under the new version, bumps the version, commits, pushes and opens the pull request;--dry-runshows each step and writes nothing.- Merging the release pull request drafts the GitHub release: the release workflow builds que.app and attaches the DMG, the zip and the update manifest (
latest-mac.yml), with the version's changelog section as the notes; a-beta.Nversion is drafted as a prerelease. Run from the Actions tab, it rehearses the build and uploads the files instead. - The release build signs and notarizes que.app once the signing certificate and the notarization credentials are added as repository secrets, and stays unsigned until then; pull request builds and
npm run diststay unsigned. - Removing a workspace answers at once and runs in the background, step by step: killing terminals, running teardown, removing the worktree (moved to a trash folder and deleted afterwards, so a large worktree no longer holds it up), deleting the branch. The workspace shows
removingwith the step it is on, a failed step no longer stops the rest,workspace.removedlists the steps that failed, and a removal cut short by a restart finishes when the daemon starts again. que ws removedeletes the branch by default (--keep-branchkeeps it;--delete-branchis gone), prints each step as it finishes, and exits 1 when one failed.- Removing a workspace no longer waits on its teardown: the dialog closes at once (deleting the branch is now the default), the view moves off it, and its row stays with a grey moving mark and the step it is on,
running teardown 12s, until it is gone. A step that fails is named on the error line,Removing breezy-trusty-mole: running teardown failed, timed out after 60s. - Changes and Files follow the worktree without a click.
- The top bar has one review pane toggle, an icon at its right end, in place of its
Changes,Pull request,Open in editorandCreate draft PRbuttons;⌘Btoggles the pane too. - The review pane's Changes header is a single line,
Commits n vs base, with refresh and open-in-editor icons at its right end; the full counts are in its tooltip. Create draft PRlives only in the review pane's Pull request tab, while the workspace has no pull request.- The review pane runs the window's full height at its right edge, like the sidebar, with the top bar beside it.
- The Changes view no longer replaces the terminals: the list lives in the review pane and a file's diff opens as a tab in the middle.
- The sidebar filter is a search icon in the title strip, in line with the window buttons; it pops the field out on click or
⌘Kand folds away when cleared. - The Tickets entry sits in the sidebar's bottom group with Report and Settings, which stays pinned to the bottom of the window above a solid line.
- Add project is a folder-plus line icon, and the other add buttons (session,
workspace, terminal tab) use a matching plus; icons are inline SVG. - The sidebar starts with a Sessions section: one row per terminal outside a
workspace, a + to open another, and the selected one marked. It replaces
the single Terminals row, and the view it opens is titled Sessions. - The window no longer has a native title bar: the app's chrome runs to the
top, the traffic lights sit over the sidebar, and that strip and the top
bar's empty space drag the window. - A new look: a black-and-grey dark theme with hairline borders and
dashed guide lines between regions, system sans for reading and mono for
labels and metadata, one coral accent, and status shown as a dot and a
word. The top bar reads project / workspace.docs/design.mdrecords the
tokens and the rules. - Settings no longer shows the overnight queue's defaults (concurrency, turn
and dollar caps, default permission mode); they live in the config file.
Protected branches, which also guard Create draft PR, sit under a Pull
requests heading.
Removed
- The overnight task queue:
que add,que task,que run,que queue, the
headless runner and the pull requests it opened on its own. Sessions in
worktrees are the one model;que reportand the morning summary describe
what those sessions did. The config keysconcurrency,max_turnsand
max_budget_usd, and theque.tomlkeystest,instructionsand
allowed_tools, are ignored, so files that still set them keep loading;
que config setrefuses them as unknown keys. - The Tonight panel in the sidebar (add task, queue control, task list) and
the hand-off of a live session to the queue (que handoff, the Hand off…
actions,handoff.create). Sessions keep running in their own worktrees.
Fixed
- A pull request whose cancelled checks were run again no longer reads failing once the new run passes: que keeps only the newest run of each check, as GitHub does.
- Shift+Enter in a terminal sent the same carriage return as Enter, so Claude Code submitted the prompt instead of inserting a newline. It now sends a line feed, the Ctrl+J newline Claude Code accepts in any terminal; a shell takes it as Enter.
- The completion chime only played for queued tasks; it now also plays when a session in a workspace finishes a turn (work hours only), and a task's workspace chimes once, when the task finishes.
- Ticket links pointed at the tracker's API host; they now use the site from the CLI's auth status or
[jira] site. - Ticket sync asked the Jira CLI for
projectandupdated, which its search refuses; que now requests only the allowed fields, takes the project from the key, and keeps the queue in the JQL's order. - Launched from Finder, the app now resolves the login shell's PATH for the daemon, so
claudeandghare found the same way they are in a terminal;que doctorreports what is on the daemon's PATH. - Terminals and headless runs start with a cleaned environment: the markers a
running coding-agent session leaves in its shells are removed (a session in
que is a top-level one again, with transcripts saved), and the launching
terminal emulator's identity is removed (programs no longer try keyboard
protocols the embedded terminal cannot serve, so Tab accepts prompt
suggestions).QUE_TERMINAL=1marks a que terminal. - The
claudewrapper in workspace terminals no longer hangs when another
claudewrapper onPATHhands the command back to it. The chain now ends
at the real executable with--settingsadded once, and a wrapper that
keeps spawning instead fails with a message.QUE_REAL_CLAUDEpins the
executable whenPATHresolution is not what you want. - A branch checked out inside a workspace's worktree after it was created is
now the workspace's branch: the Pull request tab finds pull requests opened
from it, Create draft PR and a finished task push it, and removing the
workspace deletes it.