Changelog

What's new in Polynomic

Every notable change, version by version. The format follows Keep a Changelog, and releases follow Semantic Versioning.

Unreleased

compare

Added

  • The Steward can send a task whose checks failed back to be fixed. When a task in an initiative stops because the project's checks fail on it, the Steward reads what failed and resumes that task's own session with the failures and notes on what to fix; the checks run again and the work merges once they pass, at most three rounds per task (POL-1227).
  • The Steward proposes a fix when a criterion's command is what's broken. If Run criteria fails because a program or dependency isn't installed, a script doesn't exist or no repo declares the Check, the Steward is woken and proposes the corrected criterion, such as the command with its install step in front, for you to accept (POL-1223).
  • Follow-up tasks an agent files while working on an initiative now join that initiative. The Steward is woken to triage each one: it keeps it, closes it as a duplicate of work another task already did, or sends it back to the board, and it isn't started until the Steward has looked. The Steward can also propose closing any task as a duplicate of a member in one step (POL-1216).
  • The Steward can choose which task starts next. When it makes most sense to do one task before the others, the Steward puts it first and the driver starts it as soon as it's Ready and a slot is free; the page marks it "starts first" under Members. It never starts a task still waiting on a dependency, and it never stops one that is running (POL-1214).
  • Review an initiative's tasks as they land. Set Review to As each lands in a Stewarded initiative's properties, and each task the Steward starts waits under Waiting on you once its checks pass, merging only when you approve its diff. It is off by default, so you review the work once, at the end (POL-1211).
  • You can turn a task that grew too big into an initiative. Choose Turn into an Initiative… from the task's Initiative field, its right-click menu or the command palette. The wizard opens with the task's title and description already in it, and Shape with AI starts breaking it into tasks. When you create the initiative, you choose whether the original task is closed or kept as a member (POL-1188).
  • You can take a task out of an initiative from the initiative's page. Hover a row under Members and press its ×; its sub-tasks leave with it (POL-1210).
  • The Steward can propose merging a task. When a task's merge fails and leaves it for you to finish, for example on a conflict or uncommitted work, the Steward can propose the merge instead of only commenting. Accepting it on the initiative's page runs the ordinary merge. If the merge is still blocked, you're shown why and the Proposal stays open (POL-1205).
  • The Steward can propose rearranging an initiative's tasks. It can propose filing a task under another one in the initiative, or bringing a sub-task back to the top. Nothing moves until you accept the Proposal on the initiative's page, and that holds for tasks the Steward filed itself too (POL-1203).
  • Rebase with AI when an initiative's merge conflicts. If merging an initiative into its base is blocked by a conflict, a "Rebase with AI and try again" button has an agent rebase the initiative branch and resolve the conflicts, then retries the merge for you (POL-1199).
  • The Steward can propose fixes to an initiative's success criteria. When a criterion is broken or doesn't make sense, the Steward proposes changing, adding or removing it, and nothing changes until you accept the Proposal on the initiative's page (POL-1194).
  • Watch the agent that drafts your initiative. Shape with AI now runs an agent session that reads your project's code, and the Shape box shows what it's reading and saying as it works, with a Stop button (POL-1174).
  • Tasks added to a Steward's initiative start right away. A task the Steward files, or one you or an agent put into the initiative, is considered for starting the moment it is added instead of when the Steward's wake ends or at the next check-in; the Steward names what a task waits on as it files it, so nothing starts ahead of its prerequisites (POL-1155).
  • Jev decides which check-ins need the Steward, and keeps it off other people's work. With a TypeSafe key, each check-in asks Jev whether anything needs deciding: quiet ones are a line in the Log, and only the rest wake the Steward, so Auto checks in every 20 minutes instead of hourly. A task the Steward wants to file that Jev judges likely to overlap open work outside the initiative comes to you as a Proposal naming that task, instead of being filed (POL-1147).
  • The Steward plans, decides and keeps a log. Ask an initiative's Steward for a plan and it proposes the tasks it would file and how each criterion will be tested; nothing is filed until you approve it. After that it is woken when something needs deciding (a task stopped, you commented, a check-in, the last task landed), files and reworks its own tasks, asks you through Proposals before it changes or cancels yours or pulls in another task, and writes what it saw, decided and spent in the initiative's Log (POL-1146).
  • Hand an initiative to a Steward and it works its own tasks. Turn on Steward in an initiative's properties and, while it is Active, one machine starts its tasks as they become ready (one at a time by default), merges each into the initiative's branch, and stops to ask you when one fails. It checks in on a cadence you choose, telling you where every task stands and what has been spent. Set a budget and you're told at 80%; at the budget it starts nothing new and lets what is running finish. Another machine can take over if the driving one is asleep (POL-1145).
  • Claim an initiative's goal, and accept it to land the work. "Run criteria" runs an initiative's command and Check criteria against its branch and records whether each passes. "Claim the Goal…" asks for evidence for each criterion, and accepting the claim lands the branch on main in the same click, while rejecting it records what is still missing (POL-1144).
  • Initiatives have a page of their own. Open it from the sidebar or with ⌘⇧I (g i in a browser) to see every initiative by state, and open one for its goal and success criteria, its tasks in order, what's waiting on you, and a thread to discuss it in (POL-1143).
  • An initiative's tasks collect on its own branch and land together. Tasks in an initiative now branch from one initiative branch, made when the first one starts and kept current with main; from the task's Initiative field you can refresh it, land it on main in one step, or abandon the initiative (landing what's there or keeping the branch), or switch it to land each task as it goes (POL-1142).
  • Initiatives are goals with a state. An initiative now has its own goal and moves through Draft, Active, Paused, Claimed, Reached and Abandoned; typing a new name starts a draft, sub-tasks are always in their parent's initiative, and every initiative you already had carries on as Active (POL-1141).
  • Find text on the page with ⌘F. In the desktop app, ⌘F opens a find bar that highlights every match on screen; ↵ and ⇧↵ step through them and Esc closes it (POL-1135).
  • Write a Circuit as a tree. New circuit in the designer now makes a Tree Circuit, edited in a keyboard-first outliner: Control Steps like In order, Together, Race, Retry ×N, Timeout and If / Else decide when the work at the leaves runs, every step succeeds or fails with a reason, and any step can clean up after itself with On failure. Graph circuits keep running, and Standard, Implement-evaluate-fix, Work sub-tasks and Unattended each ship a tree twin (POL-1110, POL-1111, POL-1112, POL-1113, POL-1114).
  • A running tree is shown as the tree you wrote. The run strip, the browser and the Companion show which attempt a Retry is on, steps running side by side, earlier attempts folded under each step, and a failure's reason on the row where it started (POL-1115).
  • The Circuit Assistant builds tree circuits too. Design with AI edits a tree draft in the outliner the way it edits a graph on the canvas, and never turns one into the other (POL-1116).
  • Simulate a circuit before a Task runs it. Simulate in the designer plays a tree or graph circuit: you choose how each step goes and watch what the run would do, with undo and rewind, and nothing is run or saved (POL-1121).
  • Retry a failed tree run from the step that failed. Retry from here (or r) on a failed step reopens the run there and keeps everything that already succeeded; it is on the run strip, in the Simulator and in the Circuits home (POL-1122).
  • Pass results down the tree. A prompt, question, notification or status reason can quote what an earlier step came to with {{node.<id>.reason}}, {{node.<id>.port}} or {{node.<id>.output.<key>}}, and {{failure}} inside Before retrying and On failure says what failed — so a fix pass is told what both reviewers found. Type {{ in the outliner to pick one (POL-1123).
  • Cap what part of a circuit may spend. A Budget step stops the agents under it once they have spent its limit in dollars, and fails with what was spent; the run view shows it live as "$1.20 of $5" (POL-1124).
  • See how each step of a circuit actually does. Press I in the outliner for Insights: each step's success rate, median time and retries across past runs, where runs fail and why, and a headline per circuit — read from this device's Ledger (POL-1125).
  • Triggers start work without you pressing Start. A Trigger makes a task from a template and starts it on a circuit — on a schedule ("every Monday at 09:00"), when an Action ends, from the command palette, or from the chat once you approve. Open the Trigger editor with ⌘K → Open Triggers (POL-1126).
  • One place for every circuit that is running. ⌘⇧C opens the Circuits home: runs going Now (answer their questions in place with y / n), what each Trigger fires Next, what finished Recently with Retry from here, and each circuit's Insights (POL-1128).
  • Open and make Triggers from Circuits. The Circuits home has a Triggers button, e edits the Trigger under the cursor in Next and n makes a new one; the designer's Triggers button opens the ones that start the Circuit on screen, or makes one with that Circuit filled in. Esc goes back to where you came from (POL-1136).
  • Jump to the task that runs a circuit. In the Circuits home, each circuit under By Circuit lists the tasks running it now as links, and o opens the first one; the designer's Running in button does the same for the circuit on screen. A task on a Now or Recently row now opens with a click (POL-1139).
  • See what your Triggers are about to start, in the sidebar. Under Agents, Triggers lists the open Project's scheduled Triggers by their next fire, and a Trigger that waits on an Action shows up while that Action is running; anything about to run is marked. A row opens the Trigger, the header the Circuits home (POL-1140).
  • The Companion shows your machines' Triggers and can ask for one to run. A Project on the Companion now has Triggers: what each desktop's Triggers do, when they fire next and what they last made. Ask to run it sends a request that the desktop fires the next time it syncs; if it doesn't answer within an hour the request expires, and the phone says nothing ran (POL-1132).
  • Weekly research that proposes work instead of filing it. A new Weekly research circuit has an agent research a topic on the web and propose one parent task with a sub-task per opportunity. You keep, edit or discard each item — on the desktop, in the browser or on the Companion — and only what you keep is filed, with its order. Next week's proposal is told what is already filed so it doesn't suggest it again. Point a Trigger at the new Weekly research template (Start from “Weekly research” in the template editor) and a schedule. The steps it is built from — Propose tasks, File the proposal and Start a task — work in any circuit (POL-1127).
  • Circuits can ask an agent things that aren't code. A new Ask an agent step has an agent answer a question, do research (optionally on the web), classify something into choices you list, or produce data — without a workspace and without being expected to change any code. Later steps quote the answer, a condition can branch on the choice it made, and it can post the answer on the task (POL-1131).
  • Circuits can file tasks. A new Create a task step makes a task — plain, or from one of your templates with its parameters filled in — and can have an agent fill in whatever you leave blank, quoting what earlier steps found (POL-1130).
  • See which tasks another project created. A task filed, requested or moved here from another project shows that project's key (like POL) on its row and card, with the reason in the tooltip; a filed task also says "Filed here from …" at the top of its page (POL-1074).
  • Copy a task into any project. "Copy as portable task" on a task's right-click menu (or ⌘K) puts it and its sub-tasks on the clipboard — comments, labels, code references and files included — and ⌘K → "Paste a copied task…" adds them to whichever project is open, saying on the new task what could not come across, like a dependency on a task that wasn't copied (POL-1071).
  • Plan in the cloud or on your own machine. Plan in cloud and Plan on <machine> in the Start menu, and in the Companion's actions, have the agent there plan without changing anything; its plan comes back to the Plan card, and Implement, Refine or Split resumes the same conversation where it ran (POL-1084).
  • Decide a plan from the web or your phone. The Plan card in the browser and in the Companion app offers Implement, Refine and Split; the decision is sent to the machine running that task's agent, which picks it up when it next syncs. You can also ask a machine to start a task with Plan from either (POL-1085).
  • Refine a plan line by line, edit it yourself, or ask about it. On a plan waiting for review, comment on lines of it the way you review a diff and send the comments back together; edit the plan yourself, which makes your version the next revision without asking the agent for anything; or ask the agent a question and read its answer on the card while the plan stays as it is (POL-1082).
  • Review a planned task's plan in Task detail. The agent's plan shows under the description with its version and earlier revisions, the board card says Plan ready and you get a notification; choose Implement, Refine with feedback, or Split into sub-tasks on the card (POL-1081).
  • The chat can read your GitHub issues. Ask "can I close any GitHub issues based on recent work?" and the chat lists what is open on the project's GitHub repo, checks each issue against the finished tasks and their changes, and says which ones look done (POL-1067).
  • See how far a task is behind its base before you merge. A task that has fallen behind shows ↓ 3 beside its branch button, and the Changes tab says Behind main · 3 commits (with the commits) or Up to date with main next to Merge, so you know whether Merge's rebase will move the work (POL-1058).
  • Resize the task list in the Git panel. Drag the line under the list of Tasks at the top of the Git panel to give it more or less room than the graph; double-click the line to put it back (POL-1048).
  • Find a changed file in the Changes tab. Press t (or click the search box at the top of the file tree) and type part of a path to narrow the tree to the files that match. ↑ / ↓ move through the matches and ↵ opens one in the diff (POL-1046).
  • The folded properties rail summarises the task. With the right-hand panel folded away, its strip now shows the task's status, priority, agent and model, due date and labels as icons with vertical text, so a glance answers what unfolding used to (POL-1041).
  • Start a sub-task from its parent's conversation. Turn on Context → Fork the parent's conversation in a sub-task's properties and its first agent session opens with a copy of the parent's Claude Code conversation, in its own worktree and branch, instead of rebuilding that context from scratch. It falls back to a fresh start when the parent has no conversation on this machine, and the sub-task is billed only for what it spends after the copy (POL-1036).
  • See every running agent in one place. The new Agents page (⌘⇧E, g e on the web, or the menu-bar icon) lists every agent across your Projects, the answers to questions you ask a Task included, with what it is doing (Working, Waiting on you, Quiet), how long it has run and what it has cost, with its Sub-agents and background work beneath it. Pause, stop or resume several at once, answer their tool approvals in place, and stop a single Sub-agent or background shell (POL-1030, POL-1032).
  • See what each runner session is doing. The runner's dashboard now shows, for every running session, the step it is on (reading the project, cloning, the Circuit step, pushing), the agent's progress report, the Task's state when it needs you, and the last thing the agent said; the menu-bar menu adds a one-line summary under each session. Rebuild and restart the runner to get its steps (POL-1020).
  • Your Mac's runner, in the menu bar. A menu-bar icon shows whether this Mac's runner is connected and what it is running, opens those Tasks, and starts, stops or restarts it; before the Mac is paired, it leads to setup. Its dashboard window adds the setup still to do, recent activity and the log (POL-1003, POL-1005).
  • Set Up This Mac walks the whole way. The runner's dashboard now guides you step by step, from installing the runner to a first Start, saying what each step is, why it's needed and which part of a Start's path it makes work. It pairs the Mac, saves the Claude token, sets the boundary and installs the login service itself (POL-1006).
  • The chat can check GitHub for duplicates. Ask the chat panel whether a task has already been filed and it can search the project's GitHub issues, open and closed, as well as the board. It also tells you which issues are already linked to a task here (POL-972).
  • Stop the chat's reply. While the chat panel is working, its send button becomes Stop: the reply ends where it is, along with any command it was running, and what it had said stays in the thread marked Stopped (POL-934).
  • Rename a label. Click its name in Project settings ▸ Labels and type the new one: the label keeps its colour and both of its fields, and every task carrying the old name comes with it — the field says how many before you commit to it. Renaming onto a label you already have is refused rather than merging the two, and the chat panel can rename one for you (POL-932).
  • Wait on a task in a project this one relies on. Add a dependency now offers those projects' tasks below your own, named MID-42 with the project beside them, so work that is already on their board can be what yours waits for — with nothing written to it. The coding agent and the chat panel can do the same: add_dependency takes MID-42 (POL-930).
  • A super-task says what the work under it has cost. Next to a parent's own estimated cost is the combined cost of every task filed under it, in parentheses — $0.42 ($3.10) — on its row in the list, in its header and in its properties rail. A parent whose own sessions spent nothing shows just the figure in parentheses, and it counts the whole tree at every depth (POL-928).
  • Ask the chat panel to sort your labels out. It can now read the project's whole label vocabulary — every colour, what each one is for, whether it briefs the coding agent, and how many tasks carry it — and add, edit, rename or delete one on your say-so (POL-918).
  • A label can ask for a skill, and the task says so. Writing what a label is for now offers the same / menu a description does, and a skill you pick renders as a chip there too — so Research can say "answer it with /grill-me". Every task carrying that label notes it under its own description, naming the skill and the label that asked for it (POL-919).
  • A label can tell the coding agent how to work. Project Settings ▸ Labels has a switch under each label's description: turn it on and every session started on a task carrying that label is told what the label is for and told to work accordingly — a Research task can ask for an answer rather than a diff. Agents are now told a task's labels either way, and the task's own description still comes first (POL-916).
  • A task can be put on hold. For work that is neither finished nor abandoned — parked, and left alone for now — On Hold sits between Needs Attention and Done in the status picker and on the board. Unlike Canceled, a held task is still owed: anything waiting on it stays blocked and its due date still reminds, and it raises no inbox row until you pick it up again (POL-917).
  • Fold a task's properties away. The chevron in the top corner of the properties rail puts it down to a narrow strip on the edge, giving the description and the activity the width back; press the strip to bring it back. It stays how you left it, and s and p still open Status and Priority — the rail unfolds itself to take them (POL-913).
  • Your project's labels, in project settings. Project Settings ▸ Labels lists the whole vocabulary — add one, change its colour, write what it is for, delete it — with the number of tasks carrying each, so curating your labels no longer means opening a task you had no intention of labelling (POL-898).
  • Delete a label you no longer use. A bin beside the pencil in the label picker takes a label out of the project's vocabulary for everyone, after asking first and saying how many tasks are carrying it. Those tasks keep the name — remove it there if you want it gone (POL-909).
  • Dev mode, for when a feature guesses wrong. Settings ▸ Dev mode turns the suggestion row under a task's title into the classifier's raw round — every label with the probability it was given, the bar each had to clear, both choices with their full distributions, how long it took and a button to run it again. It is kept on this machine only, and says plainly when a round was never asked for (POL-906).
  • How urgent a task is, suggested as you write it. The suggestion row now offers a priority beside the labels — Urgent for something that is broken now, Low for what can wait — wearing the same marks the rest of the app uses for it. Only on a task still set to No priority, and never on a title you are halfway through typing (POL-900).
  • Say what a label or an initiative is for. The pencil beside a label in the label picker writes a sentence explaining it, and an initiative gets the same line under the field that names it — both shared with everyone on the project. The suggestions read them, so a Chore whose boundary your team decided once is judged on that rather than on the word (POL-899).
  • Labels and initiatives suggest themselves as you type. Write a task title — in the list, in ⌘N, or in a task you already have open — and Polynomic offers the labels and the initiative it looks like it belongs to, as dashed chips you can take one by one, take all at once, or wave away. Nothing is applied until you say so; add a TypeSafe API key under the AI provider key in Settings to switch it on, and without one the suggestions simply never appear (POL-897).
  • The chat can run terminal commands for you. Ask it to build a task's branch, tail a log or kill whatever is using port 4100: it runs in that task's worktree or in the project's own checkout, and the output streams into the conversation as it is printed, with a Stop button and a record that is still there tomorrow. Every command is shown to you with its directory and asks before it runs — in the conversation itself, where its output then appears — one at a time, with no way to approve them in advance (POL-891, POL-892).
  • Search for a setting. Both settings dialogs now open with a box at the top that narrows them to what you type, and typing in ⌘K turns up the settings themselves — picking one opens its dialog already narrowed to that control. A footer says how many sections are hidden and brings them back; a setting that lives in the other dialog, or on a machine this one isn't, says so rather than coming back as no match (POL-886).
  • Search finds the GitHub issues nobody has taken on. The / overlay now lists matching offers under the tasks, and the chip beside the status filters narrows it to the offers alone — with nothing typed, that browses the whole list (POL-879).
  • The ledger says whether the agent has read your comment. Each comment now carries read by the agent with the time, or not read yet, marked only once the words were actually put in front of it; the description says when it has been rewritten since the agent was told it (POL-872).
  • Flag a comment for the agent to read. ⌥F in the composer, or "Flag for agent" on a comment already written: it reaches a running agent at its next check-in — the one thing Continue cannot do, since that needs the session stopped — and an unstarted one when its session first runs (POL-872).
  • Reopening Polynomic offers to restart the agents that were working when you quit. A list of them over the board, everything ticked, so bringing them all back is one press — untick the ones you would rather leave, or press Not now and resume them from their tasks later (POL-864).
  • Browse a change set as a file tree. A third reading beside Diff and Findings on the Changes tab (⇧T): the repo's own structure, with each file's added and removed lines, a bar for how much it moved, what is still to read and anything flagged on it — press a file, or ↵, to open it in the diff (POL-859).
  • Try a task's changes before you merge them. An action that runs in a clean worktree per run can now be pressed on a task, from the Changes tab: it runs in that task's own worktree, on that branch, and when it prints a local address — a dev server's http://localhost:5173 — that address becomes a button you click to go look (POL-855).
  • An action can be set to run until you stop it. The switch beside the timeout, for a command that is not meant to finish; it is stopped for you when the task is merged or when you close Polynomic, and is recorded as stopped rather than as timed out (POL-855).
  • A terminal inside Polynomic. `Ctrl- `` opens a panel beside your work with a real shell in it, rooted where the work is — a task's worktree, or the project's own checkout. "Open a terminal here" now opens one of these rather than a window in your terminal app; the external one is still one line down the context menu, and Settings ▸ Terminal swaps which of the two the button opens (POL-841).
  • Starting a task now tells you when the branch it would be cut from is behind its remote. Polynomic fetches first and offers to fast-forward the base before the workspace exists, so an agent doesn't quietly begin on code a colleague has already moved past — Start anyway is still one click, and a base with local commits or uncommitted work is left alone. In a project with several repos the warning names the repo it means, so "main is behind" can be checked in the right checkout. POL-843, POL-845
  • You can choose which model rebases with AI. Settings ▸ Rebase model picks it for the project, for both the button on a blocked merge and the standard circuit's rebase step; left on Default it stays on the fast tier it has always used, so pin a bigger one only if this project's conflicts need it (POL-846).

Changed

  • An initiative's Log shows its five newest entries. The earlier ones fold behind an N earlier entries row at the top of the Log; click it to read the whole Log (POL-1209).
  • An initiative's properties panel resizes and folds away, like a task's. Drag its left edge to resize it, or fold it with the chevron to a thin strip that still shows the initiative's state, Steward and budget (POL-1196).
  • ⌘⇧C opens the Circuits home instead of the designer. Press d there, or use Open the Circuit designer in ⌘K, to reach the designer (POL-1128).
  • Task rows keep room for the title. In the task list, a title always gets at least two fifths of the row; when that leaves too little room, the chips on the right (spend first, the assignee last) drop out whole, and the progress chip shows only its bar on a narrow row (POL-1103).
  • The Git panel shows each Task's full branch name. Every Task in the list at the top shows its branch (polynomic/pol-42-…) under its title, and a branch beside a commit is named the way git names it rather than by its POL- number (POL-1063).
  • Approving "Merge this work?" says it rebases first. The card says whether the branch is behind its base and that approving rebases onto it, and the button reads Approve, rebase & merge (or Approve & merge when there is nothing to rebase) (POL-1059).
  • The History panel is now the Git panel. Its button in the dock rail, its title and its shortcut hint all say Git (POL-1054).
  • History names each branch beside the commit it points at. Branch and tag names now sit between a commit's sha and its message, taking room only on the commits they point at, with any further branches on the same commit as a +N you can hover (POL-1049, POL-1052).
  • History colours its branches. The default branch's line is drawn brighter than the rest and its main chip is filled in, and each Task's branch takes the colour of its status (in progress, in review, needs attention…) on its line, its chip and its number; remote branches are outlined dashed and tags carry a tag icon (POL-1050).
  • History is a panel beside your work, and shows every Task at once. It opens from the right-hand rail next to Chat and Terminal (⌘⇧H), with each Task that has a branch listed over one commit graph: how far ahead and behind its base it is, and whether its worktree has uncommitted edits. Hover a Task to light up its commits, or pick one from the filter to see only its branch (POL-1044).
  • Tidier task properties panel. Labels sit under Priority, a sub-task's parent is the first thing in the panel, the model picker says what Default is set to, and pressing s or p clearly marks the focused status or priority and names it under the strip. Menus whose options carry a second line no longer squeeze both lines into the closed control (POL-1039).
  • A quieter, faster task properties panel. Status, priority, the agent and the reminder are now one click each instead of dropdowns, the agent and model sit right under status, and the model offers the two you use most as one click with the rest behind a menu. Parent, Initiative (which now suggests the ones already in use), Circuit and the branch fields fold under More, whose heading lists any that are set, and Sub-tasks branch from moves up once a task has sub-tasks (POL-1038).
  • You choose what the Activity timeline hides. The filter button beside Show N more lists every kind of event (comments, status changes, Agent Sessions, review, commits, merges, property edits, labels, tool calls, circuit steps, progress reports and the rest), with how many of each the task has. Untick a kind to hide it on every task, tick it to bring it back. The same list is in Settings ▸ Activity timeline. The defaults are what was hidden before, and failures and denials always show whatever is hidden (POL-1037).
  • The Activity timeline shows only what is worth reading. Title, description, label and other property edits, file references, attachments, step boundaries and progress reports are hidden by default; the Show N more button at the top of Activity brings them back, and the choice is remembered (POL-1033).
  • A shared project knows which repository each of its repos is. The first time you open it, each repo's remote and base branch are recorded for the whole project, with any credential in the URL left out. From then on, a checkout that points somewhere else is flagged by name, even when its folder is called the right thing (POL-949).
  • A label now says when to add it and what to tell the agent, separately. Project settings ▸ Labels gives each label two boxes instead of one: When to add it, which the label suggestions read, and What it tells the coding agent, handed to every session started on a task carrying the label. Writing the second one is what makes a label brief the agent — the old toggle is gone, and labels that had it on keep briefing with the words they already had (POL-924).
  • The Changes tab gives the diff its screen back. The stack of banners above it — the checks, the actions, the AI reviewer's verdict and summary, whatever is running, what the last rebase found — is now one line of chips, each stating its own news, with at most one opening underneath. Every button they carried stays on the line, and the review composer at the foot is a single row until you type in it (POL-931).
  • Labels wear their colour, and say when they change how work is done. One chip everywhere now — list rows, board cards, sub-task rows, the properties rail — tinted in the colour your project gave the label, where the listings used to draw them as identical grey chips; a label that briefs the coding agent carries a bot mark on every one of them, and the task prints what it will be told under the description (POL-923).
  • A circuit parked on a question now says it is waiting on you, not running. The badge on the task, the step it is sitting on, and the Companion's run heading all read Waiting on you and stop spinning until you answer (POL-914).
  • The suggestion row now speaks up where it used to go quiet. It offers every label your board actually uses, not only the ones defined in project settings, and it names an urgency for ordinary planned work instead of declining whenever a task is simply calm (POL-904).
  • Suggested labels and initiatives now keep up with your typing. They arrive about a second into writing a title rather than only once you stop, and re-judge every second while the text keeps changing — Suggest again, under the TypeSafe key in Settings, offers every 2 or 5 seconds instead, or only when you stop typing (POL-902).
  • Two actions can now run at once in the same place. A client and a server press side by side, in the Actions hub and on a task's Changes tab; only a second press of the same action is still refused, so a dev server cannot be started twice over its own port (POL-890).
  • A wide window now buys columns instead of longer lines. A task's Overview splits as the pane grows — the Activity ledger moves beside the brief, then its sub-tasks, dependencies and references into a third column — and each column scrolls on its own, so reading the ledger no longer takes the description off the screen (POL-883, POL-884).
  • A wide task list previews the task under the cursor. Beside the rows, following j/k as you walk the list, with ↵ still opening the task; the button beside the list and board switch turns it off for the full-width list (POL-884).
  • A task's description, ledger and composer now fill the column they are in. They stopped short of the sections around them, which left one column set at two widths (POL-884).
  • A running task on your phone now shows the steps it has been through, not every step it could take. The Activity tab lists the last four, newest at the bottom, instead of all twenty-one with the branches that never happened — tap the heading to see the whole circuit (POL-878).
  • File headers in the diff now stay put while you scroll. Each one sticks to the top of the Changes tab for the length of its own file and is pushed off by the next, so you always know which file you are looking at (POL-859).
  • The Repos section keeps itself up to date while it is open. It re-reads your checkouts every half minute and fetches from origin every couple of minutes, so a commit you just made, a task that merged or a colleague's push shows up without you pressing refresh — paused while the window is hidden, and caught up the moment you come back. POL-857
  • Starting a task now puts your name on it. A task nobody is assigned is assigned to whoever presses Start — including from a phone, where it goes to the person who tapped it rather than the machine that picked it up — and a task somebody already has is left exactly as it is (POL-856).
  • **A rebase from the Changes tab that stopped on uncommitted changes now offers to discard them.** It used to call that a conflict and offer to rebase with AI; it now says nothing conflicts, names every file sitting in the worktree, and one press throws them away and rebases — confirmed first, because nothing brings them back. POL-842
  • Issues offered from GitHub now stand in a column beside the list, and can be folded away. They used to ride at the top of the task list and inside the board's Backlog column, where they scrolled out of sight with the rows and took the first screenful of the listing. The column keeps its full height beside both views, resizes, and folds to a strip on the edge carrying the number still waiting — Show / Hide the offers column in the command palette does the same. POL-839

Removed

  • A comment no longer offers to generate sub-tasks from itself. The Generate sub-tasks button on each comment is gone; break work up with the Sub-tasks section, or ask an agent in the task's own session. POL-838

Fixed

  • The Git panel's task picker reads properly. Each Task in the menu sits on one line, its number whole and its title cut off with an ellipsis, and the menu opens under the picker instead of spilling off the right of the window (POL-1053).
  • The History dock opens at once. Opening it no longer freezes the window while the graph is read, and the graph itself now loads several times faster in a project with many tasks in flight (POL-1047).
  • The model menu in a task's properties opens again. The last button in the Model row (More, Default or the pinned model) opened its menu below the window, so clicking it seemed to do nothing (POL-1045).
  • Starting a task on a runner that isn't in Todo now runs it. A runner or cloud machine used to start, then stop at once without running the agent, whenever the task was in Backlog, In Progress or In Review (POL-1021).
  • Merging a task that ran on a runner or in the cloud merges its work. Approving one used to mark it Done with nothing merged; the branch fetched back from the runner is now merged into its base like any other (POL-1019).
  • A cloud Start shows what it is doing from the first moment. While a cloud session comes up (reading the project, cloning the repos, starting the agent), the Task shows its terminal with each step as it happens, and the repos are cloned all at once instead of one after another (POL-1016).
  • An agent picking work back up can report its way down from 100%. A task reported finished and then resumed — the review asked for changes, the merge came back — used to swallow what the agent said next: a figure below 100 blanked the whole plan to not-started, and naming the stage it was back on changed nothing on screen at all. The readout now follows the work back down, and a stage named on a task standing at 100% clears that 100% (POL-912).
  • Approving a merge now looks like it took. Answering Merge this work? leaves the task in In Review while the circuit does the merging, so the ordinary Ready for review · Merge box came straight back in the approval card's place — and stayed there, offering the button you had just pressed, until the green Merged box arrived a few seconds later. Both the Overview and the Changes tab now say Merging, with the same live git narration a merge you press yourself gets, until it lands. POL-894
  • An action that failed on a task will show you why. The failed run on the Changes tab now unfolds its whole output where it sits, the way a red check beside it does, instead of leaving you the last line it happened to print and a trip to the Actions hub. POL-893
  • The comment box shows its whole focus ring on a wide window. Each column scrolls on its own there, and a column that scrolls also clips at its edge, so the ring around the focused box lost its left and right sides; the columns now leave room for it, which also brings back the rounded ends on the sub-task and dependency rows you hover. POL-887
  • The Activity icons no longer scroll across the comment box on a wide window. With the ledger in a column of its own the composer holds the bottom of it, and each event's icon rode over the mode tabs and the field on its way past; the composer now sits above everything that scrolls under it. POL-885
  • **The Checks and Actions panels on the Changes tab now say when they are empty, instead of not being there.** Both used to appear only once they had something to report, so a project that declares no check — or whose actions all run in your own checkout rather than in a clean worktree — saw a Changes tab that looked exactly as it did before the feature existed; each now names what is missing and carries the button that fixes it. POL-863
  • Opening an offered issue on the tracker now works. The link button on a row in the offers column did nothing in the desktop app; it hands the issue to your browser now, the same way every other link out of Polynomic does. POL-835
  • Deleting a comment on a task shared to GitHub now deletes it on the issue too. It used to be withdrawn only here and left standing over there; a comment Polynomic did not post is still left alone. POL-837
  • Every GitHub button now spins while it works, and refuses a second press. Take on, Promote from a task's context menu or the command palette, Create PR from the palette, Show dismissed issues again and the buttons in Import from GitHub all sat unchanged for the seconds gh takes, so a press that worked looked exactly like one that missed. POL-834
  • Importing a single GitHub issue no longer closes the dialog when it failed. The dialog stays open with the reason, and a search that gh refuses keeps the results you had instead of reporting no issues found. POL-834
  • Opening a pull request no longer competes with the project's own syncing. The branch push and gh pr create run on a thread of their own, and the task picks up its new pull request without a reload. POL-834

v0.34.0

compare

Added

  • You can now share a project's tasks through GitHub issues. Project settings → Tracker connects a repository through the gh you are already signed in to, and Promote on a task opens an issue whose title, description, status, labels, assignee and comments are kept in step both ways from then on; issues nobody here has taken are offered at the top of Backlog, to take on or wave away. POL-809
  • A task shared to GitHub now says so wherever it is listed. The GitHub mark sits on its list row, its board card and its row under a parent, so "a colleague can read this, comment on it and close it" no longer has to be discovered one task at a time. POL-818
  • A task shared to GitHub now keeps its priority and due date in step with the issue. GitHub issues have fields of their own, a priority among them, so setting one on either side now shows on both; repos without those fields, or with their own names for them, are left exactly as they were. POL-819
  • Who a task is assigned to now travels to and from its GitHub issue. Assigning a task here assigns the issue, someone taking the issue over there takes the task here, and a promoted or adopted task arrives assigned. Tell Project settings → Tracker → Who is who which GitHub handle each member has; anyone Polynomic can't name is left alone on the issue rather than guessed at. POL-820
  • You can now clean up after a task that never merged. A task that was cancelled, parked or abandoned keeps a git worktree per repo on disk; its page now says how much that is and offers to clear it, with deleting the branch as a separate switch that shows the commits it would discard. Settings → Leftover workspaces finds them across every project at once. POL-786
  • You can now withdraw a comment. It keeps its place on the timeline, dimmed and marked with who took it back, and a coding agent stops seeing it altogether — which is how you take back an instruction you have given one. POL-813
  • A parent's sub-task list can now leave out the ones that are finished. The menu in the Sub-tasks header hides done and canceled sub-tasks, separately, and a footnote under the list says how many are hidden and puts them back; the choice is remembered on every task. POL-823
  • A coding agent can now ask to change a task other than its own. The write waits in the Tool Approval Center for you to allow it once, allow it for the rest of the session, or deny it; with nobody there to ask, it is refused as it always was. POL-808

Changed

  • A pull request Polynomic opens now takes the task's title as it is. The POL-825 in front of it is gone — the number is named in the PR's description instead, so the title reads the same in the PR list, the merge commit and the changelog. POL-825
  • A comment or edit on a task shared to GitHub now reaches the issue straight away. It no longer waits for the two-minute sync: what you change here goes up as you make it, and the sync is left doing the one job only it can — finding out what a colleague changed over there. POL-814
  • Issues offered from GitHub now arrive on their own. The band at the top of Backlog used to refresh only when you opened the project or pressed Sync now, so a board left open all day never learned about the issue a colleague had just filed. POL-815
  • A comment you write on a task shared to GitHub no longer comes back as news. It used to reappear two minutes later as a comment from over there, attributed to you on GitHub, so the task showed it twice. POL-817
  • A task that needs your attention now says what the problem is. When the agent stops without producing anything, the task quotes the last thing the agent actually said instead of only "the agent session ended without producing any changes" — and the reason a task was parked now stays on its timeline, under the move, after it is unstuck. POL-807
  • A merge blocked by an uncommitted lock file now says so, and offers to commit it. When a check rewrites bun.lock after the work is done, the merge is not a conflict and no longer suggests rebasing with AI: the task says Uncommitted changes, lists them, and one press commits them onto the branch and merges. POL-806
  • Work these unattended now stays put and says why it is unavailable. It used to disappear whenever the task was already running something, was finished, or had nothing left to work — so the one feature that works a whole set of sub-tasks in one go was invisible exactly when you were looking at it. POL-802

Fixed

  • Create PR no longer freezes the window. Opening the pull request runs off the interface's own thread, so the button's Creating PR… spinner turns while it waits. POL-824
  • Open in terminal now appears on a task whose worktree no agent ever ran in. A parent that collects its sub-tasks' work has a checkout of its own without ever running a session, and the header button, the context menu row and the command palette row were all hidden from it. POL-816
  • The Promote button now spins while the issue is being opened. Only its wording changed before, so a press that takes seconds read as though nothing had happened. POL-812
  • The Repos section in the sidebar no longer shows another project's counts. Switching project, syncing a repo or binding a new one retires whatever read was still in flight, and a read that cannot reach git now says so instead of leaving the row on Reading the checkout…. POL-810

v0.33.0

compare

Added

  • You can now see the commit graph, for wherever you are. History in the sidebar (⌘⇧H) draws each repo's default branch, and from inside a task it draws that task's branch against the branch it was cut from, so how far ahead and behind the work is reads as two lanes rather than as a number. POL-798
  • You can now move a task to another project. Move to another project… on a task's right-click menu (or ⌘K) files its title, description and priority as a new task on a connected project's board and cancels it here, with each end linking to the other; labels, the initiative, code references and sub-tasks stay behind, and so do the task's comments and history. POL-796
  • The chat panel can now run git in your repos. Ask it to commit, switch branches, pull or push and it asks you to approve each command that changes anything — every time, with no "allow always" and no auto-accept, while a plain git status or git log just runs. Anything that isn't a plain git command, and the handful that destroy work for good (clean, reset --hard, push --force, history rewrites), is refused outright. POL-797
  • You can now connect a claude or codex session to a whole project, not just one task. Project Settings → External sessions mints a connection for a terminal you run yourself, with the claude and codex commands to use it; it is registered for your user and survives restarts, and it can read, search and file work on any task in the project. POL-793
  • You can now sync a repo from the sidebar. Each repo in Repos has a sync button that fetches, fast-forwards in what is on the remote and pushes what is only local — and tells you why it did nothing when the repo has diverged, or when uncommitted changes are in the way of the fast-forward, rather than choosing a rebase or a merge for you. POL-775
  • You can now watch the AI reviewer work. While a review is running, the Changes tab shows what it is doing — what it is reading, each finding as it posts it, and its own notes as it writes them — under Watch in the banner beside Stop. POL-771
  • The task list now says which coding agent has a task. Its mark sits beside the running dot on a task whose session is live, on one pinned to an agent other than the project's, and on one whose conversation belongs to a different agent than the next session will run; hover it for the sentence. Tasks idling on the project's own agent stay unmarked. POL-764
  • You can now change a task's coding agent while it is underway. Pause the agent, pick a different one under Agent, and the button becomes Hand over to Codex: the next session starts fresh on the new agent — which is how a task gets finished when the account it was running on has spent its plan — opening with a handover of what the previous agent did, the tail of its transcript and where to read the rest. POL-767

Changed

  • A coding agent can now group the tasks it filed under a common parent. Work it breaks out with create task lands at the top level, and it can now file those tasks under one another — or promote them back out — instead of leaving you five unrelated rows; the tasks you filed, its own included, stay where you put them. POL-794
  • A coding agent can now read any task on the board, not just the work filed around its own. Name a task in a description or a comment — "the same bug as POL-318" — and the agent reads it instead of guessing at what it said; it still cannot write to any task but its own. POL-790
  • The button that creates a task and gets to work on it now says Start. It read Schedule, which promised a queue Polynomic doesn't have; the create row, ⌘N, the template dialog and the command palette all use the same verb as the Start on a task. POL-784

Fixed

  • Promoting a task now offers to create labels the GitHub repo hasn't got. GitHub refuses an issue naming a label the repository has never defined, which used to stop Promote with the error gh printed; Polynomic now asks whether to create them, and pushes the issue as soon as you say yes. POL-811
  • You can now see when the agent's terminal has your keyboard. The console takes the app's cerise focus ring and the keyboard glyph in its header lights up while your keystrokes are going to the agent instead of to Polynomic's own shortcuts — the terminal of an interactive action says it the same way. POL-785
  • Pasting an API key into Settings now tells you it was saved. The key saves the moment you paste it rather than when you next click away, and the field confirms it underneath — with the key's last four characters, since the box itself only ever shows dots. POL-779
  • Codex sessions can reach Polynomic's own tools again. A Codex agent used to report that it had no mcp__polynomic__* tools and finish without updating the task, because its MCP client hung up during the handshake on a reply Polynomic should never have sent. POL-765

v0.32.0

compare

Added

  • You can now see what is left of your coding agents' plans in one place. Agents in the sidebar footer lists every agent this machine has — whether it is installed, which account it is signed in as, which plan — and how much of each limit window is spent, with when it resets and how old the reading is. Codex's numbers come free from its own session logs, so they cover work you did in a terminal too; Claude Code only reports while it works, so its card offers a Check now that costs one small request and says so. POL-757
  • You can now approve or reject a parked step from your phone. A run waiting on "Merge this work?" or "Merge blocked — rebase with AI?" shows the question at the top of the task in the Companion, in the circuit author's own words, and answering it unblocks the run at home on its next sync — the answer is recorded on the phone and works offline. Swipe a Waiting on you inbox row to Decide; a question somebody already answered elsewhere is gone rather than tappable. POL-440
  • You can now order tasks from your phone. A task's Dependencies show what has to land before it and what is waiting on it, right under the description, and Actions → Dependencies adds or drops one — search the project or type a KEY-42 to pick what has to come first. It is an edit like any other, so it works with no signal; a dependency that would make a loop is refused with the reason. Cross-project (upstream) dependencies are shown but still added at a desk. POL-725
  • You can now search your tasks from your phone. Search from the Inbox or Projects header and it looks across every project at once, matching titles, descriptions, comments, labels and code references — with the same ranking the desktop's / overlay uses, and over the ledgers already on the phone, so it works with no signal. Each result shows why it is there: the words you typed marked in the title, and an excerpt from the comment or description they were found in. Type a KEY-42 to go straight to that task. POL-720
  • You can now ask a machine to start a task from your phone. Start on the Companion sends a request rather than starting anything — the task stays Todo and the phone says "waiting for a machine" until one picks it up, or "no machine picked this up" if none does within a day. Turn on Settings → Start Requests on exactly one machine so requests for tasks nobody has started yet get taken; a machine that already has the task's workspace takes them regardless. POL-439
  • You can now pause or resume a running agent from your phone. A task with a live Agent Session offers Pause agent and Resume in Actions, right beside Start — Pause asks the machine running it to stop where it is, Resume asks it to carry on, and the task screen shows "waiting for the machine" until it answers. Unlike a Start Request there is no setting to turn on: the machine that opened the session is the only one that can be asked, so exactly one of them ever acts. POL-749
  • The dependency graph now draws tasks in other projects. A task you requested work from — or the task elsewhere that requested this one — appears as a dashed box labelled MID-42 · Midio, in the column its place in the order puts it; clicking it opens that project, and one that isn't on this machine says so instead of showing a state. POL-666
  • You can now file a task straight onto a connected project's board. Create Task (⌘N) gains an "In" picker listing this project and the ones it relies on, so a bug that belongs to the library goes to the library — nothing here waits on it, unlike a request raised from a task's Dependencies. An agent can do the same with `create_task(project: "MID", wait: false)`. POL-716
  • Tasks can have a due date, and Polynomic reminds you about it. Set the day on the task's properties rail and you get a desktop notification on the day and once it slips, plus as far ahead as "Remind me" says; the date shows as a chip on every row and card, sorts the list, and drives the sidebar's new Overdue / Today / This week filters. POL-693
  • You can now pick a project's repositories from a folder dialog. "Choose folders…" sits under every field that takes a repo path — New Project, the setup wizard, Settings → Repositories and the "point at a folder" prompt for a repo this machine hasn't matched — and typing a path still works exactly as before. POL-715

Fixed

  • Polynomic no longer asks you to sign in again when it simply could not reach the server. Waking a laptop, or starting the app before the wifi is up, used to end in "your session has expired" over a session that renews perfectly well; a renewal that cannot be made is now retried in the background every minute, and you are asked to sign in only once the server has actually refused. POL-759
  • A browser tab now stays signed in past half an hour. The web version never renewed its session on a schedule and showed the sign-in dialog on the first request after the access token aged out — about twice an hour, for as long as a tab stayed open. It now renews ahead of expiry and, if a request is refused anyway, renews and resumes without saying anything. Signing in from that dialog also resumes the open project's sync immediately instead of waiting for a reload. POL-759
  • Rebase with AI now works on a task whose work was all done in sub-tasks. Such a task has a branch and a workspace but never ran an agent of its own, and every button that starts one — Rebase with AI, AI Fix, Resume — used to refuse with "task has no session to resume"; they now start a fresh agent in the workspace the sub-tasks made. The rebase agent can also reach every repo of a multi-repo workspace, not just the first. POL-756
  • A sub-agent can no longer finish the task on the agent's behalf. An agent that hands part of its work to a background agent and waits could still find itself stopped and its task In Review before the result came back. Not the turn-end race POL-539 closed — that guard held — but the sub-agent itself: a fork inherits the whole conversation, Polynomic's "commit and set In Review when done" included, and shares the session's Polynomic tools, so when it finished its errand it finished the task with it, and the agent that launched it was killed mid-wait. A sub-agent's call to update_status is now refused before it runs, with a note telling it to report back and leave the status to the agent that launched it; the main agent's own call is untouched. POL-755
  • "Database is locked" no longer interrupts ordinary work. Starting a task, writing a comment or letting an agent record its progress could fail outright when two parts of the app touched storage at the same moment; they now wait for each other instead. POL-746
  • A coding agent can now order the tasks it files. Follow-up work it creates with Create Task lands at the top level, and the agent can read those tasks back and record which has to land first — before, it could create them and was then refused. POL-719
  • Search now keeps its top result selected and in view. The / overlay selects the first match again after every keystroke, instead of holding on to a row from the previous query and scrolling the list down to it, and the "type to search" and "no matching tasks" lines are centred with room around them. POL-718
  • An unattended run no longer asks whether to start the task it just started. When a parent is working its sub-tasks unattended, a sub-task's "start this next" suggestion is kept as ordering for the run instead of raising the "Start the Next Task?" dialog about work the run picks up on its own. POL-712

v0.31.0

compare

Added

  • The chat can now move a task's status. Ask it to put three tasks in Todo or cancel a stale one and the move shows up on the proposed-changes card like any other edit, so it happens when you approve it. It still cannot start a task — In Progress files the work rather than beginning it — and it will not finish one whose agent is still running. POL-704
  • You can now point at a task in another project. Write MID-123 in a comment, description or title — or pick it from the # menu, which now lists the tasks of the projects this one relies on — and it becomes a link showing that task's state and title and opening it on click. The agent working the task can read it too: get_task takes the identifier as written and returns the other task's title, description, status and comments. POL-702
  • A repo can now declare environment variables. In Project settings, each repository has an Environment variables list — a local test key, a port, a database URL — that its checks, its setup command, actions and the agent sessions of tasks that touch it all run with. Stored on this machine only and never synced; secret-looking names are masked on screen. POL-691
  • Labels, project settings and the default Circuit now travel between members. A label you define or recolour reaches everyone on the project with its colour intact, and so do the project's model and auto-accept threshold — where before a colleague pulled the name of a label they did not have. Circuits themselves still stay on the machine that made them, so starting a task whose Circuit you do not have now says which one is missing instead of quietly running a different graph. POL-426
  • Starting a task now checks whether its base branch has already merged. If the branch you based it on has since landed on main — or was deleted when it merged — Polynomic asks before cutting the workspace, offering to base the task off the default instead. POL-690
  • A task can now work its whole set of sub-tasks on its own. Set a task's Circuit to "Work sub-tasks" and start it: each sub-task is worked by its own agent, in dependency order, and merged into the parent's branch as it passes the project's checks. Nothing reaches the base branch until you approve the parent's own merge at the end, which is the only thing it asks you. POL-662
  • Search can now find a task that shares no words with what you typed. Install the optional local model with scripts/fetch-embedding-model.sh and searching "teammate avatars don't show when others are online" finds a task called "'Prescence' not working"; rows found this way are marked "Similar". Nothing is sent anywhere, and search works exactly as before without it. POL-647
  • Agents now report their progress, and you can see it from the list. A working agent says how complete it reckons the task is and which of its stages it has reached, and every task row, board card and task page shows the figure with a strip of its stages — so which of your running sessions is nearly done, and which is still planning, is answerable without opening any of them. It is the agent's own estimate, so it is dated and it never changes a task's status. POL-656

Fixed

  • The chat panel's proposed changes now say where work is being filed. Ask the chat to break a task down, or to move one under another, and the approval card names the parent instead of saying "made it a sub-task of another task" — as it does for both ends of a dependency it proposes. POL-703
  • Dialogs no longer spill their contents past their own edges. A long task title in "Work these sub-tasks unattended?" — or in any dialog that lists tasks — used to stretch the rows out beyond the box and push the buttons off screen; titles now shorten with an ellipsis and the dialog keeps its width. POL-705
  • A task's worktree now includes the repo's submodules. A workspace used to be cut with every submodule left as an empty directory, so a setup command that reached into one failed and the task was parked as "the worktree could not be created" — most often a sub-task, cut from a parent branch that had added the submodule. Submodules active in your own checkout are now checked out too, and a parked task's banner and timeline say what actually failed. POL-694
  • A working agent's progress readout no longer goes stale. Coding agents are now reminded to report at least every five minutes, so "reported 20m ago" while a session is plainly still running is a thing of the past — and an agent with nothing new to say re-affirms what it last said instead of inventing movement. POL-663
  • You stay signed in. A renewal whose reply never arrived — a lid closed mid-request, a dropped connection, a phone the system suspended — used to end the session outright, and a token that had simply aged out was reported as an expired session rather than quietly renewed. POL-657
  • Changing what a task's sub-tasks branch from no longer blanks the window. The activity row for that change had no icon to draw, which took the whole app down with it; a crash in a view now shows what broke and a way back instead of an empty window. POL-654

v0.30.0

compare

Added

  • You decide whether sub-tasks collect on their parent or land on the base directly. A task's Workspace properties now have a "Sub-tasks branch from" setting: with "This task's branch" (the default) sub-tasks merge into the parent, whose branch is created for them if it never ran, and the parent lands on the base as one unit; with "The base branch" each sub-task lands on its own. POL-650
  • A terminal button at the top of the sidebar opens the project's own checkout. Not a task's worktree — the clone those are cut from, where your main branch lives; a project with several repos asks which one first. POL-651
  • The chat panel can read a task's diff now, so you can ask about the changes you are looking at. Open the chat beside a task's Changes tab and "what did this change?" or "why does it touch this file?" is answered from the diff itself rather than from the task's description. POL-648
  • You can pick which branch an action runs on, one press at a time. Actions that run in a clean worktree now open a searchable branch box before they fire — your base branch is filled in, so pressing straight through is what it always was — and the run history says which branch each one came off. POL-649
  • House Rules: what the reviews keep saying, told to the next agent. A new page distills your review comments and failing checks into candidate rules — weighted toward findings you addressed and against ones you dismissed — for you to accept, edit or dismiss; accepted rules ride into the opening prompt of every matching agent session, scoped to the code the task touches. POL-587
  • Accepted house rules can live in the repo instead. One click writes them into the repo's own CLAUDE.md or AGENTS.md, where your own terminal sessions see them too, and Polynomic stops injecting them so nothing is said twice. POL-587
  • You can see who else has a task open, and what they are typing in. A shared project shows the other members looking at a task in its header, and says "Ada is editing this description" under the field itself, so you know before you start rather than after. POL-423
  • Two people editing one description no longer means one of them silently loses it. When a title or description changes under you while you are still typing, Polynomic offers keep mine, take theirs or show both instead of quietly picking a winner. POL-423
  • Polynomic now warns you when this machine's clock is well out. A clock several minutes off the server silently wins every simultaneous title or description edit, so the cloud panel says so and the conflict notice repeats it. POL-423
  • A task's ledger now says who is talking about it. Write POL-42 in a description or a comment and POL-42's own activity list gains a note — "referenced this task in the description of #57" — sitting at the moment the reference was written. POL-629
  • An action can now ask you something while it runs. Turn on "asks for input" and its run opens a real terminal in the hub, so a command that wants you to pick a device from a list or confirm a port gets an answer instead of hanging. POL-627
  • Actions: a hub for the commands you run by hand. Declare deploys, releases and builds as buttons (⌘⇧A) that run in the repo's real checkout or in a clean worktree per run, with parameters, a confirmation gate, live output, and every run's full log kept. The chat agent can declare them for you from your justfile or package scripts, and may ask to run one — a run an agent asked for always waits for your approval. A circuit can run them too, with its own "Run actions" step. POL-624
  • The dependency graph can hide the parent → sub-task arrows. Shown in the graph's header now chooses what is drawn — finished tasks, and the dashed arrows a parent gets for each of its sub-tasks — so a project that files everything under trackers can see just the order someone recorded. POL-623
  • A merge can be undone. Undo merge on a merged task's banner winds the base branch back to where it was, restores the task's branch and workspace, and returns the task to In Review — ready to change and merge again. Offered while nothing else has landed on the base branch since; after that it refuses and says why. POL-622
  • Running checks now shows what is happening while it happens. The Changes tab lists every check the run will attempt and settles each one from queued to passed or failed in place, with the running check's elapsed time and the last line it printed — expand a row for its live output — and a Stop that kills the command without recording a verdict it never reached. POL-617
  • The Companion opens on an Inbox: what needs you, across every project. Grouped by why rather than by state — waiting on you, needs attention, in review, changes requested, working, stalled, recently done — with the age of each stall on its row, and "Nothing needs you." when nothing does. It never disagrees with the desktop's follow-up list, because both are computed by the same code (POL-433).
  • A project's task list on the phone now filters by label, assigned to me, and has a run in flight, alongside the state filter, and sub-tasks expand inline under their parent as full tasks in their own right (POL-433).
  • The chat panel can set up a project's checks for you. Ask it, and it reads each repository to find the real build/test/lint commands, declares them — with the setup command or the linked node_modules they need in a fresh workspace — and Project settings updates as it writes (POL-613).
  • An AI review can be stopped while it is running. Stop it from the banner on the Changes tab, the command palette or a task's right-click menu — the findings it has already posted stay on the diff, and only the rest of the review is given up (POL-616).
  • Diffs in the Changes tab are syntax highlighted. The language is detected from the file's name, and added and removed lines stay green and red underneath it — comments, keywords, strings and numbers take a colour, the code itself keeps the diff's (POL-597).
  • The Changes tab can now explain a diff for you. "Explain changes" has a fast model write short notes in the diff's margin — usually one per file, each beside the lines of the change it covers with those lines marked, and anything risky flagged — landing file by file with visible progress and a Stop that keeps the notes already placed (POL-596, POL-604, POL-605).
  • Tasks you have ticked can be gathered under a new task. Group under new task — in the Selection bar, or on a ticked row's right-click menu — asks what to call it and files all of them under it, moving any that already had a parent. The new task joins them wherever they already sat, so grouping some of a task's sub-tasks doesn't lift them out of it. POL-601
  • A workspace can run the project's own checks. Each repo can declare, in Project settings, how a fresh workspace is provisioned (paths linked or copied from the primary checkout, plus a setup command) and its own named checks (build, test, lint, typecheck) — runnable from a circuit's new check step, from the Changes tab's "Run checks" button, or by the agent itself. Every run is recorded on the task's timeline with its exit code, the commit it ran against and the tail of its output; red checks rank the review queue and are told to reviewers, but never block a merge. POL-579
  • The phone's task lists can now be filtered by status. Both of the Companion's lists — every project's tasks together, and one project's — were ordered by most recently updated, and nothing else. That ordering has an unfortunate property: the task that was updated most recently is very often the one that was just merged. So the top of the list, on the screen the app opens on, was reliably a list of work already finished, and finding the three things actually in review meant scrolling past them. A row of chips now sits under the title on both lists: All, then one chip per status, each with the number of tasks in it. Tap one to narrow the list, tap another to widen it to both — the same "any of these" the desktop's status filter means, so a filter set on a laptop and a filter set on a phone say the same thing. Only statuses something is actually in get a chip, which is what keeps ten of them off a phone screen, and the chips carry each status's own colour, so a picked chip and the pips on the rows it left behind match. The filter is remembered across launches and shared between the two lists, since they are the same rows at two scopes. Two things keep that from being a mystery: the count beside the title reads 11 of 40 whenever rows are being held back, and a list the filter has emptied says so — "No task matches In Review or Needs Attention" — rather than claiming there are no tasks.
  • An agent's suggestion for what to do next now waits for the merge. request_start records the nomination and the dependency it implies, then prompts you the moment the work it builds on is merged; an agent with genuinely independent work can still ask on the spot (when: "now").
  • An agent working a task can now fix the task's description. set_description is in the coding agent's toolset as well as the planning chat's — for writing the settled plan onto the task, or correcting a brief the work proved wrong — and every earlier version stays in the task's history.
  • A project can now create the repo it binds. A repository path that isn't a git repo offers to become one — git init on your init.defaultBranch plus an initial commit of whatever is already in the folder — from the New Project dialog, the onboarding wizard and Settings → Repositories. Nothing is cloned or pushed, and the offer is withheld where it would do harm: inside another checkout, your home directory, a filesystem root, or the folder your projects live in.
  • A skill you ask for in a description now looks like one. A /skill your coding agent actually has renders as a chip carrying the skill's own description on hover; a name that matches nothing stays plain text, since prose is full of slashes.

Changed

  • Session transcripts are no longer kept by default. Polynomic used to save its own copy of every agent conversation, which is the bulkiest thing it stores; Settings now has a switch to turn that back on, plus how much is already on disk and a button to delete it. Token counts and cost are recorded separately and are unaffected. POL-619
  • The chat panel stays open while you work. It now sits beside the main view rather than over it, so opening a task, scrolling the list or reading a diff no longer dismisses the conversation — and Esc closes the panel only when you press it inside the panel (POL-595).
  • A task's name now holds the top of its Overview as you scroll. Read past the title and it comes back as a bar across the column, condensed to one line; click it to edit the title, as clicking the title itself does (POL-593).
  • A blocked merge now says exactly what stood in the way. Instead of a git error in a toast, a Merge blocked dialog names the cause — conflicts rebasing onto the base, uncommitted files in the worktree, a dirty base checkout — and lists the exact files, with Rebase with AI one click away for conflicts; a circuit run's blocked merge shows the same detail in the Needs Attention banner (POL-594).
  • The app is a frame holding one work surface, so you can see what each panel acts on. Every column used to be the same near-black. The left rail was a 0.6% lightness step off the canvas in dark mode — invisible — and the task's properties rail had no fill at all, so the global rail, the task list and the one-task rail read as three interchangeable columns divided by identical hairlines. Two rails drawn the same at opposite edges of the window are a claim that they are peers, and they are not: the left one is always there and acts on the app, the right one exists only while a task is open and every control in it acts on that one task. There are now two surfaces. The shell is the frame — the left rail flush to the window edge, no fill and no border of its own, plus the gutter around everything else — and whatever sits on it is global and permanent. The work plane is the single rounded, hairlined surface lifted onto that frame, carrying whatever you are looking at, with its own header naming it. Anything inside the plane is scoped to what the plane is showing, which is why the properties rail and the Changes tab's Activity split now step up to the raised surface: they read as instrument panels bolted to the document rather than to the window. Consequences worth naming. The raised-surface step itself was too small in dark mode to say "panel" (the same 1.6% the Circuit designer had already worked around), so it is a real step now, which sharpens cards, popovers and the command palette everywhere. The agent-session terminal in light mode was near-white and merged into the rail beside it; it is a recessed grey well now, level with dark mode's reading of it. Drafts, the Circuit designer, the dependency graph and the template editor land in the same gutter instead of covering the window edge to edge, so the frame staying visible is what tells you Esc brings the app back, and the chat drawer floats in that gutter rather than welded to the glass (POL-566).
  • A circuit now picks up work that arrived over sync. A sync cycle used to end at "the events are merged, the screen is up to date". That was enough while every machine that could answer a running circuit was also the one running it — but it meant a step finished anywhere else folded into a task whose next step was correctly worked out and simply never started. The run sat there, looking live, until somebody opened that task on the machine driving it and did something. Pulling now runs what it unblocked. The rule about who may is unchanged and is applied before anything moves: a run belongs to the machine that started it, because that is the machine with the worktree and the agent session, and a second one advancing it would start steps against nothing. Nothing is visible in a single-machine setup, which is every setup today. What it buys is the thing that was not possible before it — answering a parked task from somewhere other than the machine doing the work, and having the work carry on (POL-437).

Fixed

  • Codex's model picker now shows the models Codex can actually run. It asks the signed-in Codex CLI for its own account-aware catalog instead of borrowing the configured API provider's list, so newly available Codex models appear even when Polynomic's direct AI features use Anthropic. POL-763
  • The model pickers now pick up newly released models. The list refreshes in the background instead of making you wait for it, so a model released since you last opened Polynomic is there rather than a day or a restart behind. POL-639
  • Presence and live sync nudges now work against a cloud server. The connection they ride on crashed on every secure server before it sent a byte, so the roster stayed empty and nudges never arrived; sync itself was unaffected throughout. POL-637
  • The Cloud panel says when the live connection has crashed rather than showing "connecting". A connection that has stopped retrying now says so and tells you a restart brings it back. POL-637
  • You can now see who else is in a project, not just who is in the same task as you. A "Here now" row in the sidebar's Cloud section, faces on task rows and board cards, and a roster in the Cloud panel that lists this machine too and says whether the live connection presence rides on is up. POL-637
  • Leaving a task takes you out of your colleagues' presence. Going back to the listing no longer leaves the roster claiming you are still in the task you closed. POL-637
  • Joining a project clears the "create your first project" screen. The first-run setup steps aside as soon as you have a project, however you got it — accepting an invite or creating one from the sidebar, not just finishing the setup itself. POL-636
  • An Action can be run again as soon as the last run in its repo ends. The launch form re-checks the checkout while it is open instead of freezing what it saw, and a command that leaves a background process behind no longer keeps its run from being marked finished. POL-635
  • The phone's filter chips are no longer sliced off at the top. A project's filter row kept its full height however long the task list under it was, instead of being squeezed flatter the further the list ran. POL-628
  • Chat no longer calls an Action it just created an unsaved draft. Actions the chat panel writes land in the Actions hub immediately, ready to run; only its task edits are proposals waiting on a card, and it now says so. POL-626
  • A task's cost now counts the work its agent delegated. When an agent hands a job to a sub-agent, those tokens are billed too, and Polynomic was leaving them out — a task that fans out was reporting about a third of what it actually cost. POL-621
  • Corrected the per-token rates for Fable, Mythos and Sonnet 5. Fable and Mythos were priced as Sonnet, reading 70% low, and every Sonnet was priced as Sonnet 4.6, reading 50% high on Sonnet 5. POL-621
  • An attachment whose name contains # or % now reaches your other machines. Those two characters broke the request that finds a file in the cloud, so the file uploaded from the machine that attached it and never appeared on any other (POL-618).
  • An explained diff no longer makes the whole window scrollable. The notes in a long diff's margin were putting a scrollbar on the app itself, so the left rail and the Changes header could be scrolled off the top of the screen (POL-611).
  • The card that previews a task reference no longer blinks away while you read it. Anything a running agent did — a comment, a status change — was re-rendering the description under the pointer, taking the open card with it; the rendered text now stays put while it updates (POL-606).
  • The timeline's icons no longer scroll across a task's sticky title. The bar holding the top of the Overview now covers the column's own content — the icons down the left of the ledger rode over it as they passed (POL-609).
  • The card that previews a task reference now always goes away. It could stay on screen after the pointer had left it — most often once something on the page was selected, or after clicking the reference to open the task — and now closes as soon as the pointer is off it (POL-599).
  • The Changes tab opens on a large diff instead of hanging on it. A task that touched a few hundred files took seconds to show anything, and stayed sluggish afterwards — every keystroke in the review comment box arrived late. Two causes, both quadratic in the size of the diff and neither of them git being slow. The backend asked git for the diff once per changed file. On a real 449-file diff that was 450 process spawns costing 5.7 seconds, against 0.3 seconds for the same diff asked for in one go — so it is now one git diff, cut up per file, with the per-file walk kept as a fall back for the case where the two disagree. The tab then drew every line of every file up front, each line a handful of DOM nodes with its own clickable gutter: 155,000 lines is around half a million nodes built in one blocking pass. The bodies now come within a budget. A file over 4,000 lines opens folded, and once 10,000 lines are drawn the files after it open folded too — spent in relevance order, so what a task's Code References name is what gets drawn. This is the fold the tab already uses for lockfiles and build output, applied to length: every file is still in the list, the header bar says how many are folded and how many lines they hold, each one wears its own line count, and one click opens it. Three smaller things on the same surface: a file that is folded no longer splits its diff or numbers its lines to produce rows nobody is looking at; a file's viewed-mark fingerprint is hashed once when the diff arrives rather than on every render, so ticking one file off stopped re-hashing six megabytes; and the diff files are memoized, so a keystroke in the comment box no longer re-renders every line on screen (POL-568).
  • The task list's filters now narrow sub-tasks too. Every filter (state, label, assignee, initiative, code area) applies at every depth of the tree, and a row whose sub-tasks the filter is holding back says so — "2 hidden by filter" (POL-536).
  • An empty listing names the filter that emptied it. A label or assignee filter now gets "No tasks in this filter" rather than an offer to seed demo tasks into a project that has plenty (POL-536).
  • An agent asking you a question no longer asks permission to ask it. Claude's multiple-choice question is its own permission prompt, so Polynomic no longer puts an Allow/Deny dialog in front of it (POL-562).
  • Renaming a task no longer takes its branch away. The branch is recorded when the workspace is created instead of recomputed from the title, so editing the title of a task under way no longer points it at a branch no repo has; a task already in flight has its branch frozen on the next rename (POL-549).
  • The sidebar's Archive and Rename buttons work. Both asked with window.confirm() / window.prompt(), which draw nothing in Tauri's webview and answer "no" immediately; they are real dialogs now (POL-557).

v0.29.0

compare

Added

  • Starting a task that is still waiting asks first. Start and Plan name the tasks that haven't landed yet and what that means for the agent, then Enter starts it — a warning, not a gate — on every route in, including the x and ⇧P keys (POL-529).
  • Write a task down before you know where it goes. Capture offers Decide later, which makes a Draft that belongs to you rather than to a project and syncs between your devices; filing one puts it in a project as an ordinary task, from ⌘⇧D on the desktop or the Drafts tab on the phone.
  • The phone app has the desktop's icon. The Companion wore the Expo placeholder; it now carries the same P on iOS and Android, redrawn from the desktop artwork with the checkerboard baked into its corners filled in.
  • Sessions that last a month, and a way to end one from another device. A sign-in now renews itself quietly in the background instead of expiring after seven days, and the Account panel lists the devices signed into your account so any of them can be signed out remotely (POL-436).
  • A new task from any text on screen. Selecting prose anywhere the app renders it — descriptions, comments, the chat and planning panels, the review's Intent panel — offers New task, which opens the create dialog on that text, quoting the selection in full whenever the title had to be cut and citing the task it came from (POL-502).
  • The @ picker offers folders, not just files. Folders appear in the menu with a folder icon and a trailing slash, typing a trailing slash narrows the menu to folders, and a folder mentioned in chat is given to the agent as a directory to look inside rather than a file to read.
  • The findings of a review, as a list. A Diff / Findings switch on the diff's bar (⇧F) lists every finding on screen, each quoting only the lines it is about, in the order n / N already walked them (POL-518).
  • A task can be started from the card that previews it. Hovering a POL-42 reference now shows the task's state and the same Start / Plan / Resume its row in the listing carries (POL-511).
  • Polynomic installs your coding agent and signs you into it. A setup panel — in onboarding, and behind Install or sign in in Settings → Coding agent — says for each agent whether its CLI is here and whether you are signed in, with a copyable command and a button that runs it in your own terminal (POL-516).
  • A circuit can be run again. Run again on the run strip, a task's right-click menu and the command palette starts the circuit over from its first step with no step history or attempt counts, reusing the branch and worktrees so the commits survive (POL-523).
  • A work login and a personal one, chosen per project. Settings gains an Agent config section — named config homes the coding agent authenticates in, each with its own credentials and environment overrides — picked per project or overridden per task. A project stores the config it uses by name, so on a shared project "Work" resolves to each member's own login.
  • A task can be re-filed after the fact. The properties rail has a Parent field on every task, and a sub-task's right-click menu can move it out of its parent; filing a task under one of its own descendants is refused (POL-524).

Changed

  • The coding agent picker looks like a choice between two agents. Every option carries the vendor's own mark and hue and an agent whose CLI isn't installed says so in amber, across all three pickers — the project's, a task's, and a circuit step's — which now render from one place (POL-515).
  • A task's activity reads as what happened, not as everything recorded. Related neighbouring events fold together and each folded row says what it hides ("ran Prepare workspace — ok", "changed the title, description and priority"), while the events that are the history still get a row each (POL-526).

Fixed

  • An agent that launches a background agent is no longer killed for it. A turn that ends with in-flight background work — a subagent, a backgrounded shell, a scheduled wakeup — is read as a pause rather than as the agent finishing (POL-539).
  • A letter pressed after switching project no longer switches project again. A closed dropdown ignores letters entirely, and keys pressed inside an open dropdown or menu no longer reach the list behind it (POL-520).
  • Choosing a project's coding agent no longer fails on a fresh install. The rebuild of the registry's project_settings table left out the columns holding the project's coding agent and agent config; both are carried across now, with a test that round-trips every project setting.
  • An agent can order two tasks against each other, not just against itself. task_id is the task that waits and depends_on the one that has to land first, and neither has to be the agent's own task — over everything the session can read (POL-510).
  • Dismissing the update notification means dismissed. Closing the toast silences that version for good on this machine, while a toast that merely faded is held back and offered again on the next launch (POL-521).
  • A collapsed row in a task's activity can no longer be blank. A run of events whose kind has no summary phrase of its own now reads as the last of them plus how many there were (POL-526).
  • A task's description can be selected and copied. Finishing a drag inside it no longer swaps the text for the editor (POL-502).

v0.28.0

compare

Added

  • The rest of Polynomic's agents follow the coding agent you picked. AI Review, sub-task generation, "ask a question", a circuit's review step, planning, the chat panel and the Circuit assistant all run the agent the task or project resolved to, rather than always running Claude Code (POL-457).
  • A coding agent per circuit step, so a circuit can mix vendors. "Coding agent" joins "Model" on the circuit editor's agent steps, so one vendor's agent can write the code and another's review it; pinning an agent clears the model pinned beside it (POL-458).
  • The app stops assuming Claude Code. Everything that named a CLI now names the one your project runs, and a control the agent can't drive — plan mode, the Approval Center, auto-accept — is gone or disabled with a sentence saying why instead of failing when you use it (POL-458).
  • Run your Agent Sessions on Codex. Settings grows a "Coding agent" picker, overridable per task, and a Codex session runs in the same terminal, manages its task over MCP, commits in the same worktree and resumes the same way. What it does differently is stated rather than smoothed over: it sandboxes itself, has no plan mode, and streams no partial text (POL-453).
  • Codex sessions have a transcript and a cost. Each working span is read back by the harness that wrote it, so a Codex transcript renders instead of coming back blank, and token costs are priced per provider rather than at Anthropic's rates (POL-454).
  • Use an OpenAI key for the AI features. Settings gains an "AI features" section that picks the provider — Anthropic or OpenAI — behind the tool-call safety assessments, "explain this change" and the model catalogue, with each provider's key and cache in its own slot. This is not the coding agent that runs your Agent Sessions (POL-451).
  • A review comment can be about a whole file. Every file header has a Comment action, and f opens the same composer on the file under the cursor; a whole-file finding renders under its file's header, is walked by n / ⇧N, counts in the header, and stays visible when the diff is collapsed (POL-505).
  • "Agent session running" is now somewhere you can go. The Changes tab's banner carries a View session button that opens the Overview with the session column expanded (POL-504).

Changed

  • A review comment can be about a passage, not just a line. Dragging down the gutter picks a range of lines, ⇧-click stretches one that exists, and the range is highlighted whole and named in words beside the composer (POL-508).

Fixed

  • Going back no longer means scrolling back. Every scrolling pane — the task list, each board column, a task's Overview, the Changes diff, Statistics and the Review queue — remembers where it was for as long as the app is open, keyed to what you were looking at (POL-500).
  • The task list keeps its place when it updates. A live refresh no longer re-opens rows you had folded away or snaps the viewport back to the cursor, and a failed refresh no longer blanks the listing (POL-509).

v0.27.0

compare

Added

  • Tick several tasks and do one thing to all of them. Rows can be selected — the hover checkbox, ⌘-click, ⇧-click, or Space / ⇧J / ⇧K / ⌘A — and a bar above the list sets a status, priority or label on the whole set, starts it, or hands it to the chat, reporting what it reached and what it left out (POL-499).
  • A review comment now has a severity and somewhere to go. Findings carry an optional blocker / should-fix / nit severity that orders n / ⇧N and the queue bar, and can be resolved or dismissed (r / ⇧R) as new events rather than edits. Send to agent carries the unresolved set with severities spelled out (POL-493, ADR-0020).
  • Review has a front door. The Review queue lists every task whose changes are waiting on a human — in the sidebar with a count, on ⌘⇧R, and in the command palette — ordered by what you can do next rather than by how alarming a task looks (POL-495, ADR-0021).
  • A long diff is a queue you work through, not a wall you face. Files are ordered by relevance with machine-written ones folded last, a file can be marked viewed (v) and the mark survives a restart, and the diff has the task list's j / k spine with the task's intent beside the code (i) (POL-494, ADR-0019).
  • The AI reviewer points at lines, and says what it did not read. AI Review now runs on the same evaluation profile a circuit's review step uses — one anchored comment per finding, one verdict, no status changes — and the Changes tab opens with the verdict, the summary, and what the reviewer could not check (POL-492).
  • An agent can read the work filed alongside its own. list_subtasks names the family from the parent's id and get_task reads any of them in full; reading only, and the boundary is the shared parent (POL-489).

Changed

  • The sidebar's filters became an instrument instead of a list. The nine states are a grid of pips with icon, hue and count — ⇧-click selects the run between two, ⌥-click narrows to one — and initiative, assignee and label are chips, all folded under one Filters header with a badge and a Clear (POL-503).
  • @ finds the file you half remember. All three completion menus — @ for files, # for tasks, / for skills — match fuzzily and rank rather than merely filter, bolding what your query matched and saying when the list is capped (POL-497).

Fixed

  • "Rebase with AI" now rebases onto the branch the merge actually uses. The prompt names the local base rather than origin/<base>, which a merge never touches, and the step only takes its "made changes" port once the branch sits on top of its base in every repo (POL-496).
  • A working agent always has a terminal. A registered process is now the proof a session is running, and the thread pumping the terminal retries EINTR instead of reading it as the process exiting (POL-498).

v0.26.0

compare

Added

  • An agent that finishes a task in a chain says what to tackle next. The tasks waiting on this one are part of the opening prompt, and naming the next one — as a comment, or as an offer to start it — is a finishing step, before In Review ends the session (POL-461).
  • A Cloud section in the sidebar, under your account. Sync state, the people on a project and the link that invites somebody move out of the Settings dialog into a Cloud panel reachable from the sidebar and the command palette (POL-467).
  • Tasks can wait on each other. A task can record that another one has to land first: a Dependencies section shows both directions, ⌘⇧G draws the whole graph laid out so left to right is the order to work in, and none of it gates Start (POL-459).
  • Back and forward through where you've been. Arrows in every main-pane header, ⌘[ / ⌘], ⌘← / ⌘→ and Alt+← / Alt+→ go where you actually came from and name it; switching List↔Board or Overview↔Changes is not a stop on the trail (POL-447, POL-468).
  • Invite somebody to a project, and join one you were invited to. An owner can create a copyable invite link for an email address and manage the member list, anybody can leave, and an invite waiting for your account shows up in the Account panel (POL-420).
  • Joining takes the project's task labels with it. Joining adopts the cloud project's key, so the task your teammate calls POL-42 reads POL-42 on your machine too; a key already taken locally can be adopted later from Settings (POL-420).
  • A warning when a teammate's repository isn't the one you have. The repositories a project's history refers to are checked against your checkouts by git remote URL, so the right checkout is found under the wrong folder name and a wrong repo under the right name is flagged (POL-420).
  • Shared project settings are keyed on something that can be shared. Circuits, task templates and project-level settings use the cloud project id when the project is bound to one; machine-local settings — repository paths, terminal app, API keys — stay local (POL-420).
  • A shared timeline names whoever did the work. Events carry the account they were written for and a cached members directory turns that into a person, so a colleague's work reads as theirs (and an agent as "Ada's agent") everywhere, MCP's get_task and list_tasks included. Assignee becomes a member picked from that directory on a cloud project (POL-418, POL-417, POL-416).
  • A Statistics page. A digest of the open project on ⌘⇧S: what is waiting on you ranked by how badly it needs you, where the open work sits, created against finished per day, cycle-time medians, and which labels and directories the work keeps coming back to (POL-445).
  • Re-file a task under a parent from chat. The chat panel and a task's planning session can move a task with set_parent, or promote it back out with an empty parent; a task that hasn't started inherits the new parent's branch as its base (POL-444).
  • Reference files and tasks in the chat panel. The composer takes the same @ and # completion menus as a task's own fields, and both are resolved to a full path or a task before the message is sent (POL-412).
  • Save a task as a template. Right-click a task, use the button at the foot of its properties rail, or the command palette, and everything it holds — down to code references and sub-tasks — becomes a template (POL-407).
  • Change a task's base branch after it has started. Picking a new base transplants the task's commits onto it; if that can't be done cleanly nothing changes and it says why, and a running agent has to be stopped first (POL-387).
  • Task templates: the task you keep making, with the part that changes left blank. Put {{package}} where the item goes, build them in the full-window template editor (⌘⇧T) and use one with ⇧C; templates are global or scoped to one project and export as JSON (POL-392).
  • Name the file and the task you mean in the title. A task's title takes @ and # references — the file as a chip that also records a Code Reference, the task as a link — and the header is click-to-edit (POL-404).

Changed

  • The task detail has one rhythm to add things to. A section now takes one of three spacings chosen by what the section is, the four tinted alert strips collapse into one banner taking its tone from the state palette, and everything the keyboard can reach takes a focus ring (POL-463).
  • The agent session now sits beside the task instead of under it. As a column on the right it shows two to three times the output, resizes by its left edge and collapses to a slim rail, and its header carries the same live indicator as the task rows (POL-357).
  • The dependency graph draws unrelated chains as unrelated chains. Each connected part is laid out on its own and stacked down the canvas, biggest first, so every chain's leftmost column is work that can start now (POL-471).
  • Circuit steps read as cards on a board. The designer has its own surface tokens — a recessed canvas, nodes with fill, border and shadow — and it is easier to work in: failure plumbing renders dashed and dimmed, dragging snaps to the grid, and Tidy up re-lays the whole graph (POL-470, POL-469).
  • Every task tool is told which task it means. Every task-touching tool takes a task_id, in the version its profile allows: absent for a coding session, optional for a planning session, required for the chat panel (POL-405).
  • Templates is a button in the sidebar now, next to Circuits. The four footer entries sit as two columns and give way to their icons on a narrow sidebar (POL-410).

Removed

  • Agent sandboxing is gone until it can be done properly. The per-project toggle, the image field and that whole second launch path are removed — with neither runtime installed a session ran unsandboxed anyway — and the reasoning is kept in docs/adr/0011-agent-sandboxing.md (POL-472).

Fixed

  • Signing in resumes a project whose server URL was written differently. A server is identified by which server it is rather than by how it was typed — one trailing slash used to make it a different server — and stored URLs are rewritten on startup (POL-466).
  • A circuit run belongs to the machine that started it. Opening a synced project on a second machine used to close the first one's session and move the task to Needs Attention; the other machine now renders the run faithfully and refuses the actions that would need its workspace (POL-415).
  • An attachment is confirmed uploaded once, not every ten seconds. The sync engine remembers which attachments the server has been shown, keyed by the file's length and modification time, instead of re-hashing every attachment every cycle — a poll that alone read 87 million rows a month (POL-460).
  • "You're not a member of this project" instead of 403 Forbidden. Sync now pauses on it the way it does on an expired session and says which account is being refused, rather than retrying every ten seconds forever (POL-443).

v0.25.0

compare

Added

  • Circuits: choose the graph a task is worked by. Typed steps wired together — prepare a workspace, run a coding agent, review the diff, merge — that can branch, loop and run in parallel; two ship built in, and you can design your own in the full-window Circuit designer (⌘⇧C). A run survives quitting the app, resuming at the step it was on (POL-350).
  • Design a circuit by describing it. The designer's assistant wires the circuit you have open — unsaved changes included — and lays out new steps, and nothing is saved until you press Save (POL-355).
  • The chat panel knows what you are looking at. It carries the open task and its tab, or the list/board and the filters narrowing it, as a View Context sent every turn, and detaching it is remembered across restarts (POL-403).
  • A task's sub-task list now behaves like the main listing: right-click a row for status, priority and labels, start, plan or resume it from the row, and see the same live readouts a top-level row shows (POL-385).
  • Right-click a task in the list or on the board for a context menu: status, priority and labels in place, session controls, merge or request changes, and copy its ID or branch name (POL-367).

Changed

  • The task list expands the whole sub-task tree, not just one level. Any sub-task with children of its own gets a chevron (l / h), and every level starts expanded (POL-391).
  • The Overview says what to do when changes are ready. A handoff block states what is waiting ("6 commits across 2 repos are waiting on your review") and hands over the next step, with Changes Requested getting the mirror of it (POL-359).
  • The task detail header no longer runs out of room. The readouts drop detail as the pane narrows while the tabs, utilities and session button hold their place, and the branch name becomes a copy button (POL-390).
  • Requesting changes now reads as one flow instead of three disconnected steps. "Request changes" wears the number of comments it is about to hand over, and the next step — Send to agent — sits beside the sentence saying what happened (POL-389).
  • A merge blocked by a conflict now offers to rebase with AI instead of dropping the task into Needs Attention. On approval an agent rebases, resolves the conflicts and hands straight back to the same merge step; decline it, or let it fail twice, and the task lands in Needs Attention as before (POL-368).
  • Merging a task whose circuit is still working now asks instead of refusing: "Stop and merge" ends the run and the agent session it has going, then merges by hand (POL-366).
  • The sidebar's status filters now fold away behind their header, remembering whether they are open and showing how many states are selected while collapsed (POL-316).
  • Rework the circuit run summary on a task so it says what actually happened. Collapsed it names the step the run is on, steps never reached sit behind their own line, a step that completed on a failure port no longer gets a green tick, and why a run stopped is visible without expanding anything (POL-362).

Fixed

  • You can select and copy what a chat says. Selection spans the whole transcript — in the chat panel, a task's planning chat, the Circuit designer's assistant and the saved agent transcript — and a streaming reply no longer scrolls the view out from under it (POL-406).
  • The merge is retried after an AI rebase finishes. A turn ending now ends a circuit's agent-session step wherever the task sits rather than only at In Progress, plan mode excepted, since that session waits for its plan to be approved (POL-397).
  • A circuit step that resumes the task's session no longer spends its one shot on a conversation Claude no longer has: an id gone from disk starts a fresh session, as resuming by hand already did.
  • The Changes tab of a merged task still shows its changes. Once the branch and worktree are gone the diff and commit list are read back out of the merge commit, with a "Merged" banner per repo naming where the work went (POL-394).
  • Merging a sub-task into its parent's branch shows up on both tasks. The sub-task names where it went, and the parent's timeline gets an entry each time a child lands on its branch (POL-401).
  • Merging a sub-task into its parent's branch works while the parent is still open. The worktree lookup matches the whole branch name rather than its last segment, and a checkout git refuses is reported as a blocked merge with the reason (POL-398).
  • The error toast in the bottom-right corner is opaque. It sits on the same raised surface as every other toast, lifted by a shadow, with a solid destructive border (POL-400).
  • A task you finished stays finished. Stopping a circuit run now records that the agent's session ended and the startup sweep leaves a Done or Canceled task where it is, and moving a task to Done while its circuit or agent is still going asks whether to stop that work first (POL-399).
  • The error toast in the bottom-right corner can always be closed. Long unbreakable text wraps mid-word, a tall error scrolls within the toast rather than growing past the top of the window, and multi-line errors keep their line breaks (POL-393).
  • A task's work is no longer thrown away because its base branch doesn't exist. Base branches are verified per repo before they are used — a parent's branch is only inherited if git can find it — and a check that cannot run reports the git error instead of reporting the agent as idle (POL-386).
  • Labels are now the same label whatever their casing: 'Feature' and 'feature' no longer sit side by side or split their tasks between two filters. A label keeps the spelling it was created with, and projects that already collected duplicates have them collapsed on first open (POL-356).
  • The Standard circuit now actually reaches In Review when its coding agent finishes. The agent's "I'm done" was routed through the pause path, which deliberately leaves the agent step running (POL-364).
  • The Changes panel now says what is actually running instead of always claiming "Reviewing with AI". An AI rebase reads "Rebasing with AI" and any other session "Agent session running" (POL-360).
  • Merging a task puts it in Done again. Merge now closes a run whose agent step is stuck "running" with no session alive and merges by hand, and the circuit's own merge waits for the merge to land before handing the task back (POL-365).

v0.24.0

compare

Added

  • Give the user's account a home: an account button at the top-left of the sidebar opens a dedicated panel for signing in or up, seeing account information and cloud projects, and signing out (POL-346).
  • Ask AI to explain a piece of code in the Changes tab: an Explain action beside Comment in the diff's line-selection strip, and one on each file header, hands the excerpt or the whole file's change to Claude and renders the answer inline as prose (POL-342).
  • Ask the user to sign in again when the sync server rejects an expired token, pausing sync instead of retrying forever (POL-344).
  • Set a base branch per repo on the project, in a dedicated project settings dialog. Resolution order is task override → project repo setting → git detection (POL-330).
  • Rename a project, from the sidebar or the command palette.
  • m merges the task under review, behind a confirmation dialog whose Merge button is focused so Enter confirms it (POL-239).
  • 1/2 switch between the Overview and Changes tabs, with Kbd badges on the tabs so the shortcuts are discoverable without the help overlay.
  • A permanently visible line under the description saying that @ references files and / references skills — the placeholder that used to say so disappeared as soon as you typed (POL-358).
  • A caption under the sidebar's CODE section saying what selecting a node does: filter the task list to tasks referencing that part of the code (POL-348).

Changed

  • Cloud sync credentials now come from the signed-in account instead of being entered per project: enabling sync only asks which cloud project to bind, and one sign-in resumes every paused project on that server (POL-346).
  • Build the agent-model dropdowns from Anthropic's Models API instead of a hardcoded list, so newly released models show up on their own. The catalog is cached for 24h and refreshable from Settings (POL-343).
  • Rate tool calls on security risk and irreversibility rather than on how much they change. Edits inside the task's worktree are tracked by git, so they now rate 9–10 instead of landing in the "caution" band; low scores are reserved for credential access, unfamiliar network destinations, and destructive or out-of-worktree commands (POL-347).
  • Stop popping the approval dialog for calls the agent's auto mode would have approved on its own: the blocking GUI hook moved from Claude Code's PreToolUse to PermissionRequest, which fires only once Claude Code has decided a call needs a human. "Allow always" now installs a real session-scoped permission rule, and a call the classifier hard-denies surfaces in Needs Attention (POL-345).

Fixed

  • The chat panel and the per-task planning chat no longer run in Claude's plan mode, which refused the very task-authoring tools the chats exist to use. Both stay read-only on code by denying the editing tools outright instead (POL-351).
  • Stop the desktop-notification spam for tool calls the AI risk classifier clears on its own: a notification now waits for the classifier's verdict and only fires for a call still parked for a human (POL-349).
  • Stop the activity spinner from running forever next to a merged task's status in the list and board: the terminal merge/rebase progress event carried filler copy instead of the empty message that clears the indicator (POL-352).
  • Show Start on any unfinished task that has no session, and Resume on any task whose session is stopped — both were gated on Todo or Backlog, so a task that had lost its session offered no way to pick the work back up. The x hotkey resumes a stopped session too, instead of doing nothing.
  • Show a real timestamp instead of 'Last synced: Invalid date' in the sync settings: the status payload serialized its field as snake_case while the frontend read camelCase (POL-341).
  • Record an AI rebase in the ledger even when its session exits without the Stop hook firing — a crash, a kill, or an exit from an external terminal — so the rebase that produced the work is part of the task's history (POL-337).

v0.23.0

compare

Added

  • Attach files to a task: drop them onto the task detail view and they're listed as chips, stored with the project, and recorded in the timeline as they come and go. An agent can pull one into its workspace with the copy_attachment tool, and its startup prompt lists what's attached. Attachments sync with the rest of a cloud project, deduplicated by content (POL-323).
  • Around 25 new command-palette actions, grouped by what they act on: a task's priority, ID and branch name; its session (start, start in plan mode, resume, stop, open in terminal, pop out); its review (merge, request changes, rebase, AI review, AI fix, create GitHub PR); navigation (settings, keyboard help, search, list/board, sidebar and chat toggles, sort order, new project); and the task filters, including a toggle per state (POL-321).

Changed

  • The comment composer now names what pressing submit will do. Three ambiguous buttons become a mode strip — Comment / Ask / Continue — and the placeholder, the border and the submit button all follow the selected mode (POL-322).
  • Rename 'Terminal' button to 'Open in Terminal'.
  • New app icon, regenerated across macOS, Windows, Linux, iOS and Android.

v0.22.0

compare

Added

  • Let the agent request starting tasks with user acceptance (POL-306).
  • Relaunch app after update install via tauri-plugin-process.

Changed

  • Replace review bottom panel with always-accessible Changes tab (POL-282).
  • Send more events at once when syncing.

Fixed

  • Show merge failure as error toast instead of changing task state (POL-323).
  • Terminal rendering regressions.

v0.18.0

compare

Added

  • Global chat panel accessible from any view as a slide-out (POL-307).
  • Independent chat sessions not tied to a specific task (POL-310).
  • ] keyboard shortcut to toggle chat panel (POL-312).
  • Show tool-use status in chat and planning panels (POL-311).
  • Auto-update via tauri-plugin-updater (POL-305).
  • Expand subtasks in list view by default (POL-309).

Changed

  • Use sonnet for chat panel conversations (POL-321).

v0.17.0

compare

Added

  • Per-task base branch override (POL-292).
  • Allow changing the branch of a task (POL-296).
  • Cmd/Ctrl+. shortcut to copy task ID to clipboard (POL-303).
  • "Create sub-task" action in the command menu on task detail view (POL-293).
  • Expose create_task to coding agent sessions (POL-310).
  • Start Claude sessions with --permission-mode auto (POL-299).

Changed

  • Make the left side panel collapsible (POL-296).
  • Improve review panel with resize, readability, and inline feedback (POL-288).

Fixed

  • Re-create workspace when resuming a task after merge (POL-267).
  • Fix onboarding wizard showing for existing users (POL-297).
  • Use explicit refspec when fetching remote base branch (POL-294).
  • Fetch remote base branch before creating worktree (POL-293).

v0.16.0

compare

Changed

  • Use self-hosted runner for CI.

v0.15.0

compare

Added

  • Onboarding wizard for first-time users (POL-238).

Changed

  • Improve agent session initial prompt (POL-286).

Fixed

  • Fix stuck agent panel after app restart (POL-295).

v0.14.0

compare

Added

  • Pop an agent out of the inline terminal into an external terminal (POL-271).

Changed

  • Default cloud sync URL to https://polynomic-server.fly.dev (POL-280).

Fixed

  • Send MCP reconnected notice when popping out to external terminal (POL-289).
  • Reconcile task-number collisions across synced replicas (POL-279).
  • Re-seed cloud next_number for already-bound projects (POL-5).
  • Send local highest task number when creating a cloud project to avoid number collisions (POL-2).

v0.13.0

compare

Added

  • Include parent task context in agent startup prompts (POL-273).

Fixed

  • Live-refresh task listing on sync pull (POL-278).
  • Fix 502 push failures during prolonged sync (POL-277).

v0.12.0

compare

Added

  • Cloud sync UI — auth flow, settings panel, and status indicator (POL-266).
  • Client sync engine with cloud sync Tauri commands; dev auth via register_cloud/login_cloud (POL-263).
  • Selectable text in task timeline comments (POL-265).

Changed

  • Split project settings into shared vs per-member local; move sandbox and GitHub repo settings to local only (POL-261).
  • Give the ask-a-question agent full MCP server access (POL-264).
  • Advance push cursor between batches to support large sync payloads (POL-272).

Fixed

  • Show a friendly message on duplicate-email registration (409) (POL-268).

v0.11.0

compare

Added

  • Hybrid Logical Clock (HLC) event ordering as storage foundation for cloud sync (POL-222).
  • Tooltip on task reference links (POL-258).
  • Continue button in the comment composer (POL-257).

Changed

  • Made tool-approval and create-task buttons match app density (POL-255).
  • Updated button sizes to match website styling (POL-253).

Fixed

  • Terminal rendering stuck during rapid streaming (POL-233).
  • Terminal rendering corruption and Linux kerning (POL-78).
  • Review panel not showing all changes (POL-254).
  • Container mode working directory for multi-repo projects (POL-252).

v0.10.0

compare

Added

  • Windows support for build and distribution (POL-229).
  • Version numbers to model picker labels (POL-230).
  • Comprehensive auto-accept documentation (POL-231).

Changed

  • Made the right side panel scrollable (POL-234).

v0.9.0

compare

Added

  • Token cost tracking displayed on task details and timeline (POL-225).
  • Track how each tool call was resolved — auto-accepted (AI threshold or "Allow always" grant), approved, or denied — and surface the running tally on the task detail and timeline (POL-227).
  • Safety rating to tool-call assessment with auto-accept threshold (POL-223).
  • Sync imported Linear tasks to match their Linear issue state (POL-219).

Changed

  • Made the left and right side panels resizable (POL-226).

v0.8.0

compare

Added

  • View transcript dialog is now scrollable and searchable (POL-218).
  • Active-process indicator on list & board tasks (POL-211).
  • "Ask a question" action to the ledger (POL-204).
  • Planning chat can read/write tasks across the project (POL-209).
  • Auto-approve Claude's internal Task* tracking tools (POL-210).
  • Auto-allow AskUserQuestion tool without approval (POL-205).
  • Auto-focus the jump-to-task search input when summoned (POL-203).

Changed

  • Ledger improvements — Working Span slicing, lossless archive, pause routing (POL-202).

v0.7.0

compare

Added

  • macOS-native sandbox isolation for Agent Sessions (POL-164).
  • Suggest a default agent image for container isolation (POL-197).
  • Per-project sandboxing toggle to settings (POL-195).
  • Record rebases as a dedicated ledger event (POL-190).
  • Hotkey indicators to Create/Schedule buttons (POL-189).
  • Highlight tasks with unread activity (POL-142).
  • Persist terminal/review panel sizes in localStorage (POL-112).
  • Collapse consecutive same-type events in the ledger (POL-139).
  • CHANGELOG.md documenting versions and changes (POL-187).
  • Filter the task list by label (POL-92).
  • x hotkey starts task under cursor in list/board mode (POL-183).
  • Clear / search input when summoned (POL-176).

Changed

  • Settings panel is now scrollable and viewport-bounded (POL-193).
  • Force sonnet for the rebase-with-AI agent (POL-194).
  • Integrate Rig for LLM features; AI tool-call descriptions (POL-186).
  • Derive Kbd badge stroke from currentColor for better theming (POL-198).
  • Escape unfocuses comment/description text inputs (POL-188).

Fixed

  • Wrap wide tool-approval content with overflow-wrap:anywhere (POL-185).

v0.6.0

compare

Added

  • Honor the Claude settings allow-list plus a safe set of default tools when deciding which tool calls need approval (POL-169).

Changed

  • Design critique pass on the task detail view (POL-174).

Fixed

  • Disable cargo HTTP/2 multiplexing to fix a flaky CI download (POL-170).

v0.5.0

compare

Added

  • Native tool-approval dialog driven by a PreToolUse hook, evolved into a summonable Approval Center (POL-135, POL-151).
  • Keyboard shortcuts in the tool-approval dialog (POL-145).
  • Set task priority with p and start planning with Shift+P from the list/board (POL-165, POL-91).
  • Change task status from the list/board with s (POL-152).
  • j/k navigation in Select dropdowns (POL-153).
  • Explicit Planning task status (POL-132).
  • Per-task and per-project model selection (POL-119, POL-51).
  • Import GitHub issues and create PRs via the gh CLI (POL-89).
  • Status filtering in the search box; sub-tasks included in Jump to task and search (POL-128, POL-161).
  • g hotkey to jump to the just-created task (POL-121).
  • Resume button on list/kanban items in the needs-attention state (POL-129).
  • Live progress shown during merge/rebase (POL-127).
  • Error boundary around the Terminal component (POL-114).

Changed

  • Revamped the Review panel into a commit-log master–detail view; AI Review now posts a single consolidated comment (POL-66, POL-137).
  • Only show the tool-approval dialog when summoned with a; don't auto-open the Approval Center (POL-146, POL-166).
  • Wider, viewport-capped approval popup with wrapping, pinned buttons (POL-163, POL-167, POL-144).
  • Auto-advance a task to In Review when its coding agent goes idle (POL-143).
  • Run rebase/merge off the main thread to keep the UI responsive (POL-158).
  • "Allow always" now persists approvals (POL-147).
  • Linkify task references in markdown content (POL-160).
  • Make sub-task handling legible across the interface (POL-113).
  • Map Linear workflow state to task status on import (POL-116).
  • Moved archive/plus buttons to the PROJECTS header (POL-131).
  • Auto-size the task description textarea to fit its content (POL-107).

Fixed

  • Fix terminal text overlap during interactive updates (POL-130).
  • Reset project-specific filters when switching projects (POL-115).
  • Pre-approve git commands for the agent (POL-106).
  • Tell a resumed agent that the MCP server reconnected (POL-149).

v0.4.0

compare

Fixed

  • Fix an xterm WebGL crash by upgrading addon-webgl to the xterm 6-compatible 0.19.0.

v0.3.0

compare

Added

  • "Import All" action to import every issue from Linear (POL-97).

v0.2.0

compare

Added

  • Keybind indicators shown next to the actions they trigger (POL-111).
  • Import Linear labels and projects alongside issues (POL-98).

Changed

  • Use the WebGL renderer for xterm to fix glitchy rendering (POL-110).
  • Open the Linear settings link via the Tauri opener plugin (POL-109).
  • Added a portable bump-minor recipe to the justfile for cutting releases.

v0.1.0

compare

Initial release.

Added

  • Event-sourcing core: domain types, event store, projections, and registry.
  • Tauri v2 + React/TypeScript app shell with a dark theme, command palette, task list, board, and detail views.
  • Keyboard-first navigation throughout.
  • PTY-hosted agent sessions that drive Claude, with worktree isolation, review, and guarded merge.
  • MCP server letting agents manage their own task.
  • Code references and a Code-Tree view linking tasks to source.
  • Planning Sessions and a planning chat, including plan-approval notifications (POL-64, POL-95, M10).
  • Generate sub-tasks from a comment via a headless agent (POL-45).
  • Linear issue import via the command palette, searching by identifier (POL-67-era work).
  • Global full-content task search via / (POL-40).
  • @// and / completion popups for tasks and skills in descriptions (POL-74, POL-79).
  • Add/remove repositories on existing projects (POL-83).
  • macOS .dmg and Linux .AppImage release pipeline and tooling (POL-94, POL-102).
  • App state persistence to restore the session on restart.
  • Markdown rendering for issue descriptions and comments.

Changed

  • Switched the theme accent from violet to Signal Cerise (POL-93).
  • Rebase onto the local base branch rather than the stale remote (POL-58).