You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
You can talk to the PM by DMing your Discord bot: give its connection your Discord user ID, and your DMs go to a PM conversation (marked "via Discord"), with /new, /list, /switch and /close, and Approve and Decline buttons when the PM asks first. Inbox items can come as DMs too.
PM conversations have Reset… (in the conversation's header and its menu in the list): the conversation writes its journal, then starts fresh with the same name, agent, model and place in the list, carrying on from that journal. A link at its top opens the previous history read-only.
A new Documents view keeps design docs, plans and spreadsheets outside your repository, linked to the projects and tickets they're about: browse, search and filter them, make or import one, and link it from either side. Each ticket has a Documents section with Create design doc, which makes a doc from a short template and links it, and agents working on the ticket are told to read it. Settings choose where new documents go. PDT's own local documents and Google Docs and Sheets come in later releases.
Local documents, no account needed: write docs in Markdown (Rendered or Write, saved as you type) and work in sheets with formulas, formatting, several sheets, sort, filter and charts. Comment on a heading, some text or a sheet's cells, see an agent's changes the moment it makes them, import .md, .xlsx and .csv files, and export as .md, .xlsx or .csv.
A Google plugin: sign in with your Google accounts, pick Docs and Sheets from your Drive or make new ones, and work on them in Google's own editor inside PDT while agents edit them (Sheets fully, formulas, formatting and charts too) and answer their comments.
Agents and the PM can now read and write your documents: they draft specs and plans as documents linked to the ticket, fill in sheets with values, formulas, formats and charts, and answer comments, asking you before each change unless the project lets the PM act. A document can open in tabs beside an agent's or the PM's conversation, opened by you or by the agent, so you watch its edits land; on a phone it is a pane beside the conversation.
Workflows can work on documents: create a doc or sheet, add text, add rows, set cells, add a chart and comment, and start when a document changes or gets a new comment. Two new templates log each merged ticket to a sheet and have an agent answer comments on a project's documents.
Watch a ticket or a workflow run: ask the PM to keep an eye on one and it is told when the ticket's agent reports, the work finishes or fails, or it waits on you, then tells you, with no checking in between. You can watch one yourself with the eye at the top of a ticket or run, and hear about it in the Inbox's Updates and in desktop notifications; the page shows who watches it.
Settings › MCP servers: add an MCP server once and every agent gets it, in conversations and terminals, with keys taken from your secrets. Remote servers that use OAuth sign in once in PDT, and you can allow, ask or block each of a server's tools (search Slack, never post). MCP servers you already added for workflows stay workflow-only: tick Agents under Who gets it to give one to your agents.
Settings › This host › Storage shows free disk space and what each worktree takes, build output apart, with Clean, Remove and Clean all finished. PDT cleans a finished ticket's build output after two days (set per project), warns in the Inbox when a disk runs low, and pauses auto-start when it is almost full.
Auto-start can keep colliding work apart: pick a project's hot areas in its Settings, and it won't start a ticket in a hot area while another ticket in that area is in progress. It takes the next ticket instead, and the waiting ticket's card says why. The Refiner and the PM now set a ticket's areas when they refine or draft it.
A session whose turn ended while its background tasks (a shell command, a subagent) still run now shows Background in the sidebar, tabs and ticket sessions, with the tasks listed on hover. It doesn't count as finished, so the tab icon stays quiet until the tasks end and it turns Done.
A shell session keeps its last output across a PDT restart: when it starts again, what it showed before is still there, above a "restarted" line.
PDT for macOS now runs on Intel Macs as well as Apple silicon: the app is one universal build, and the install command works on both.
Adding a Google account is now just Sign in with Google, from this machine, your network or Tailscale, with no Google Cloud setup. Agents use an account's Docs and Sheets only once you click Allow agents for it, and Stop agents takes that away; your own OAuth client is still available under Advanced.
New workflow triggers for tickets: created (with who made it), unblocked, labels changed, priority changed and parent changed. Tickets an agent files now show the agent's persona and the ticket it was working on ("Created by Coder · from APP-12") instead of looking like yours.
Workflows can start when something opens or is answered in the Inbox, when an agent session needs you, ends a turn or exits, and when a workflow run fails or finishes. A workflow never reacts to its own runs unless you turn on Include own.
Workflows can start when a release is published on a project's repository, when a PDT update is available or installed, when disk space runs low or recovers, when a connection or forge sign-in starts failing, when a todo comes due, and when Scryer finishes a download.
Tickets agents file while they work now wait in your Inbox as proposals, off the board, with who proposed them, from which ticket and why: accept one to To do or the backlog (with your edits, and agentic only if you tick it), mark it a duplicate, or reject it, and the agent hears your decision. Turn off the Ticket proposals workflow to let agents' tickets go straight to the board.
A stuck agent now gets more chances before you're asked: it is nudged twice, then restarted in a fresh session with its task and the branch's state, and a step that runs out of time is restarted once. Change the nudges, their messages and what happens at loop and time limits in Settings › This host › Agents, or customize the new When an agent is stuck workflow.
Settings › Notifications can now escalate what waits unanswered in the Inbox to a desktop notification, hold toasts and desktop notifications during quiet hours (with one summary when they end), and post questions, approvals and failed runs to a chat channel such as Discord. It all runs as the new Notification rules workflow, which you can customize, and the levels you'd already set carry over.
Updates set to install automatically when idle can now wait for a time window, install anyway after agents have worked for a while, skip nightly builds, and check PDT after it restarts, all in Settings › This host › Updates. A failed update or check goes to your Inbox, and it all runs as the new Install updates workflow, which you can customize.
The Pipeline's merge wait, CI wait and Code time limit are settings when you add it, with the times it always used (3 days, 6 hours, 8 hours) as defaults. Your own templates can have duration parameters too.
A new "After a release" workflow template: when a project publishes a release (stable ones only, by default), it can announce it in a Discord channel and bump your Homebrew cask's version and checksum with a pull request (or a push) on your tap.
A parent ticket now closes by itself when its last part is done (or Won't do), with a comment and a notification, and opens again if a part does; turn off the "Close finished parents" workflow to close parents yourself. The board's Done column can show the last day, 3, 7, 14 or 30 days, picked from the board's view menu and kept per project.
Choose when the PM brings its conversations up to date in Settings › This host › PM: at a set time or each hour, on the days you pick, and post the daily update to a chat channel such as Discord. The workflow editor points to these settings, and a customized PM daily checkpoint can be reset to the default from Settings.
A code of conduct (the Contributor Covenant 2.1) for everyone taking part in the project; report problems to security@pdt.dev.
The PM can sort your ticket proposals for you: ask it to, and it proposes Accept, Duplicate or Reject for each, all in one Inbox item where you untick the ones you don't want and allow the rest.
Link a ticket to an issue already in GitHub, GitLab or Jira by pasting its address or key: it shows beside the ticket with its title and whether it is open, and Done closes it only if you tick Close it when this ticket is done. Addresses no tracker recognizes can be added as plain labelled links, and the PM can link issues too.
Changed
The Changes view shows every changed file on one page you can scroll through, like GitHub's "Files changed": each file has a sticky header, the file list follows your scroll and jumps to a file, Viewed collapses a file, and generated files, lockfiles and very large diffs start collapsed behind "Load diff".
The docs are shorter and easier to follow: installing and updating, and troubleshooting and the FAQ, each have one page, and Run configuration is one page that also covers forges and CI providers.
Auto-start is now the built-in Pick up tickets workflow, with your project's auto-start settings as its settings: it starts the same tickets as before, and you can edit or copy it to pick up tickets your own way (only some labels, Ready tickets only at night, caps per label or area). A ticket whose start was cut short by a restart or a full disk is now handed on to its workflow instead of being left without one.
Conflicts with the base branch are fixed once, when a ticket is next to merge: before that the ticket shows "Conflicts with main (deferred)" without interrupting its agent, and at the merge PDT merges the base in itself, regenerates lockfiles and generated code you list under [[merge.regenerate]] in .pdt/project.toml, and sends only real conflicts to an agent, so far fewer CI runs and agent turns go into keeping branches up to date. Set When to resolve conflicts to Immediately in a project's settings to keep the old behaviour.
The Review outside pull requests workflow no longer makes a ticket for each pull request by default: the review goes straight to your Inbox. Turn on Create a ticket for each pull request to keep one per pull request; workflows you already have keep their tickets.
The Inbox has a new look: every item shows its kind, ticket and links at the top, one line on why it waits, and its actions in a bar at the bottom. Agents' questions are cards you answer with a click or a number key (or Something else…), notices are coloured by severity, and the list has five sections: Questions, Approvals, Stuck, To act on and Ready to accept.
Cleaning up disk space is now the built-in Clean up storage workflow, set in Settings › Storage › Cleanup: the thresholds, whether pickup pauses when a disk is almost full, and whether finished worktrees are cleaned at once. While pickup is paused, the Board says why on each ticket it would start, and Settings › Storage can resume it.
The PM's daily update and journal checkpoint now come from a built-in workflow, PM daily checkpoint, so you can change when they're sent (at a set time, only on weekdays), send them to conversations you haven't written to, post the update to Discord, or turn them off.
Views are as you left them when you come back: Changes keeps the file, the scroll, Rendered and Whole file, collapsed files and a comment you were writing, and tickets, the Backlog, documents, files, workflows and conversations keep their place too.
PDT is now open source under the Apache License 2.0. The licence and notices are in the repository's LICENSE and NOTICE files.
Conversations show ticket keys as pills with a card of the ticket on hover, link pull request numbers and the project's file paths, and colour status words in tables. Tickets an agent creates, changes, links or comments on, its messages, workflow runs and watches show as cards, and approving one shows what it would create or change.
The website's landing page has a section on the PM, with a conversation in which it plans a feature into tickets and asks before creating more.
Agents now ask before running a command or writing a file with secrets, unless their session bypasses permissions. Such commands and files must use a secret, and stay in the session's folder, out of .git.
PDT now asks before it runs a command from a project's run configuration for the first time, or after the command changed: starting a run or test shows the command to approve, and CI and regeneration rules wait for your approval in the project's settings. Regeneration rules now come from the base branch's committed file only.
A change to the file of a repository workflow you have turned on no longer takes effect by itself: it waits in the Inbox as a proposal from the repo until you accept it.
A workflow's Run a command script no longer accepts {{…}} values pasted into it, so text from an issue or webhook can't run as shell code: pass them through the step's env and use "$NAME" in the script. An existing workflow whose script uses them now fails at that step until its values move to env.
Claude sessions in Bypass now ask in your Inbox before PDT tools that act for you (creating or editing tickets, messaging agents, running workflows), and agents outside a workflow step ask before commenting on pull requests and issues or opening a pull request. A persona with no tools ticked now gets none instead of PDT's default set.
The PM's Scryer API tools (scryer_schema, scryer_query, scryer_mutate) and the Scryer query and mutate workflow steps now always use the schema your Scryer reports; if Scryer doesn't give it, they say so instead of falling back to a built-in copy.
PDT opens faster: terminals, rendered Markdown and documents shown beside a conversation now load the first time they are shown, not with the app.
Agents' questions in the Inbox are easier to read: a one-line question, the agent's background as a formatted message, each choice with what it means and its pros and cons, and the agent's recommended choice marked, explained and already picked for you to send.
Fixed
A save or action that fails now always says so: if the screen doesn't show the error itself, it appears as a toast.
When two workflows finish a merged ticket at the same moment (the Pipeline and Finish merged tickets), neither cancels the other's run any more: the ticket moves to Done once and both runs end as they should.
An Inbox gate now shows its whole question formatted, with clickable links, under a short title (the step's name when the question is long), and an Open pull request button (Open merge request on GitLab) when it is about one, such as a pull request's review. A long question scrolls while the choices stay in view, on desktop and phone.
An agent waiting on background tasks (a long test run, a command it watches) no longer waits for ever after PDT updates or restarts: PDT tells it which tasks the restart stopped so it starts them again, at once for a workflow step and with your next message for your own conversations. Automatic updates also wait until no agent is waiting on background tasks, and a manual update lists them as busy.
An agent's proposed change to a workflow is easy to find and decide on: it shows in the Inbox under Workflow proposals (who proposed it, their note and what changed) with Accept, Discard and Open; the workflow's banner has Accept and Discard beside Review; the workflows list marks it "Proposal waiting"; and it works on a phone too. In the Versions tab the buttons stay in view and long lines of the diff wrap instead of pushing them off screen.
PDT gets over a full disk on its own: once there is space again it saves within seconds, starts the workflow runs and delivers the notices it couldn't, each once, and retries steps a failed save stopped. While it can't save, the Inbox says so, with how much space is free.
A conversation no longer falls out of step when PDT can't save (a full disk): a message the agent took stops showing as queued, nothing it said repeats at the end, and what couldn't be saved is saved in order once space is free. Claude conversations that lost messages this way get them back from Claude's own transcript.
Measuring worktree sizes in the background no longer locks a worktree's git index, so an agent's git add, checkout or commit no longer fails now and then with "index.lock: File exists".
On Windows, abandoning a ticket's attempt no longer counts its session as stopped twice, and an agent stopped because its pull request merged is no longer sent the merge news.
Moving a ticket to Won't do or abandoning its attempt now stops its sessions and runs, closes its pull request, and removes its worktree, branch and workspace when nothing would be lost (a new On Won't do setting can keep them); a ticket whose branch merges while it waits at Accept no longer stays stuck there.
In a conversation, the agent's answer no longer ends up inside a folded group of tool calls when it calls another tool afterwards: only tool calls (and a one-line note right before one) fold, and the text between them always stays visible.
The PM's comments on a ticket that is being worked on now reach the ticket's agent, as yours do. The message says who wrote the comment and gives the local path of each screenshot or file attached to it.
A ticket opened beside the backlog or board now shows its Attachments, including files an agent or the PM attached to the ticket itself, as the ticket's own tab does.
A new worktree that PDT can't save (for example on a full disk) is removed again, with its new branch, instead of being left behind on disk. Branch names such as HEAD and bases that start with - are refused with a clear error.
Turning remote access on or off no longer restarts test runs, keeps a run you stop meanwhile stopped, and shows on the run why one couldn't start again. Remote access also recognises an owner whose long Tailscale login has non-ASCII characters.
On macOS, a workflow's web request to a host name that fails with "No route to host" now says it may be the Local Network permission and where to turn it on, as it already did for local addresses and .local names.
Tab strips (a workspace's tabs, a ticket's sections, the documents beside a conversation) move between tabs with the arrow keys, Home and End, and screen readers announce each tab's panel. Terminals pass mouse clicks in wide windows through to programs using older mouse modes correctly.
On Windows, everything a terminal started (a dev server, an agent's MCP servers) now ends with PDT, even when PDT crashes or is killed, instead of being left running and holding ports and files.
A ticket that needed no change to the code no longer waits at "Merge blocked" once it passes QA: it moves to Done (or waits for you at Accept first), and its sessions, worktree and branch are cleaned up.
A run's tailnet address no longer lingers after PDT restarts: it's removed when the run comes back on another port or doesn't come back, and turning remote access off removes the addresses PDT made before the restart too.
A web run is no longer given a port that another server on your machine already listens on only over IPv6 (::1), as Vite and other Node dev servers on localhost often do on macOS.
On Windows, when an update is rolled back, Settings › Apps shows the version you are back on instead of the one that failed.
On the Backlog, tickets a bulk action moves out of the list leave the selection, so clicking a row opens it again instead of selecting it. Esc clears the selection.
Auto-start no longer gives up on a ticket that shared an area with work in progress: it starts it when its overlap rule allows, or tries it again once the other work is done. A ticket auto-start couldn't start says why, with a Try again button.
Long badges on board cards, such as "Waiting: overlaps …", no longer spill out of the card or widen the column: they shorten with an ellipsis, and the full text shows on hover.
Updated a cryptography dependency that compared webhook signatures in non-constant time.
If "Reset to default" under stuck-agent handling fails, it now says so, and a failed "Stop watching" shows its error once instead of twice.
A ticket key that is part of a branch name in a comment or message is no longer turned into a link, and a terminal tab no longer keeps asking the server for documents it can't have.
Signing in to a remote MCP server now refuses a server whose sign-in or token address isn't secure (https, or http on your own computer), so a hostile server can't run script in PDT through its sign-in link.
Other web pages can no longer show PDT inside a frame, and the web app now runs under a Content-Security-Policy that only lets PDT's own scripts run.
Signing in with Google now sends you back only to the PDT that started the sign-in in your browser, so a Google sign-in link from someone else can no longer hand your account to their machine. pdt.dev also warns more strongly before it sends you to an address that isn't on this computer.
A branch name, data folder or link with shell characters in it can no longer run code through a run's setup or command: on macOS and Linux the shell reads it as one value, and on Windows the run refuses to start and says why.
Secret values are now also replaced when a command prints them in hex, base64 or URL-encoded form, or when its output is cut short, and the keys PDT keeps for itself (connections, plugin sign-ins, forge logins, the update token) are replaced like your secrets. The Secrets page now says plainly what secrets don't protect against.
Outside input passed to another workflow (Run a workflow) stays outside input: the called workflow's agents get it fenced, run locked down without secrets, and count against the triage caps. Issue titles, outside tickets' titles, and bots' comments and reviews now reach agents fenced too.
A workflow notification's link now opens only web addresses (http and https); a link in any other scheme, such as one from a webhook's payload, does nothing.
Starting a Devin session no longer hangs when your Devin config has many lines ending in a comma and a comment.
When PDT briefly can't read its workflows, the events that came in meanwhile now still start their workflows and resume waiting steps once it can, instead of being skipped.
Signing out of an MCP server now says so when the keychain keeps its tokens, and a failed merge or base update that can't be undone says the checkout is left mid-merge. Failures to save a run's state, close an answered Inbox item or keep a session's permission mode are now logged instead of passing silently.
API errors are more consistent: a file that disappears answers "not found" instead of an internal error, a full disk while saving a file says PDT can't save changes, and the same failure always has the same code and status.
Open local documents and spreadsheets no longer slow PDT down: it checks their files for outside changes without re-reading them, and a large spreadsheet that is loading or saving no longer holds up the others.
A slow git fetch or git status in one project no longer holds up workflow runs and ticket starts in the others.
Keyboard focus is easy to see again: the focus ring is a solid blue in both themes, and buttons, rows and links that used the faint outline now show it clearly.
With reduced motion turned on in your system settings, popovers, menus, side panels, the phone drawer and spinners no longer slide, zoom or spin.
Text is easier to read: links in dark mode, status labels on their tinted badges, and cleared, skipped or unavailable items now meet the usual contrast guidelines instead of fading out.
On a phone, a template's preview in New workflow now opens as a sheet that takes the focus and closes with Escape or a swipe, without closing the gallery. The Release notes panel on the update banner closes with Escape too and gives the focus back to its button.
Cleared updates no longer flash back in the Inbox, and worktrees made by agents or a merge show up within seconds. Ticket hover cards, workflow switches and the matching Settings sections stay up to date after a change.
The app does less work while agents run: a reply streaming in, or an Inbox or update poll, no longer redraws the open session, the sidebar and the tab strip.
When PDT can't be reached (it stopped, or your browser is offline), a "Can't reach the host" strip shows above the page at every screen size, and the Inbox says it can't load instead of saying nothing waits on you.
A plugin's Sign in section lists a connection as soon as you save it, instead of after a reload.
Get started shows the full width of where PDT found git and each agent, cutting a long path in the middle with the whole path in a tooltip, and a long project path wraps on a phone instead of running off the card.
A workflow graph opens at a zoom where its node titles can be read; a graph too big for the canvas starts at its left (or top) edge, for you to pan the rest.
In the workflow editor, an optional setting that isn't set (such as Run now's Confirm) shows as an "Add …" button instead of an open form with required fields; once added, Remove unsets it again.
The Start dialog picks the agent from a list, so every agent you have shows, however many there are.
Keyboard shortcut hints no longer show on touch screens, and a proposed ticket's labels in the Inbox show as label chips.
Dragging a card from To do into In progress (or Code and the other Pipeline stages) now opens the Start dialog, instead of marking the ticket In progress with nobody working on it.
A board lane for a parent with many parts, or too little room for a dot per part, shows its progress as one bar with the counts in its tooltip, and the lane header wraps instead of running past the edge. The lane header no longer shows one part's pull request; each part's card shows its own.
The text cursor shows again when you write, reply to or edit a comment on a line in the Changes view.