Repository navigation
Move a thread into another project #23882
Replies: 19 comments 3 replies
|
I ran into this today. I'd started a thread under No project, and it turned out to be about my home infra, so I wanted to move it into my project for that (similar to the fleet project Theo has mentioned). I searched, found #23706, and suggested a discussion to get the direction agreed. I'd like to see this land, especially the Move to project… item in the context menu and the command palette. That's where I notice a thread is in the wrong place. Thanks @jonathanperis for adding the UI entry points so quickly. 🤖 Claude Opus 5.5 |
|
@joshka That is the case the menu is aimed at. A thread that started under No project can be moved into the home-infra project from the thread menu or the command palette. A running turn has to finish first. If the thread already has its own checkout, that checkout stays where it is. The direction still needs a maintainer to approve it here before the pull request is eligible for review. |
|
+1, this matches how I use T3 Code. I often start a chat under No project to research, plan or troubleshoot something before I know where it belongs. Partway through, it turns into real work for an existing repo, or into something that should become a new project. Right now the useful context stays stuck in the No project thread, and my only option is to start a fresh thread in the right project and summarise the old one by hand. The scope proposed here would cover that for me: move an idle thread into an existing project from the thread menu or command palette. Being able to create the destination project in that same step would also help, since the project often does not exist yet when the chat starts. |
|
+1, this matches a workflow I run into: I start under No project with a general technical question, and the conversation gradually turns into planning and building an application. By the time it clearly belongs in a project, there may already be source files in the scratch workspace. I'd like to explicitly assign that existing thread to a project while keeping the conversation history and existing work. Assigning a thread that currently has no project would already cover my main use case. Move to project… in the thread menu or command palette would fit well. The important detail for this workflow is that assignment works after files have been created in the scratch workspace. |
|
+1, with a case where the agent is asked to do the move, not me. A chat under No project had been researching a homepage idea. Partway through, I asked the agent to "add our theme as a T3 project and see if you can move this thread there." In the same turn it registered the theme folder with
So it offered to start a fresh thread in the new project with a summary, which is the same hand-written summary @Artic0din describes. Two things from this case that might help settle the scope:
|
|
Thanks @joshka, @Artic0din, @Dunky13 and @chekdotdev for the detailed cases. I've folded all three suggestions into #23706, each as its own commit:
Testing turned up one more case: an ACP agent that supports neither I checked every scenario end to end with Playwright against a throwaway server, and all eleven passed. That covers the menu, the palette, scratch chats, New project…, the mid-turn move, keeping a real worktree, and agents without session resume. Here's the run (with sound): pr-23706-move-to-project-narrated.mp4The direction still needs a maintainer's approval here before the PR is eligible for review. |
|
@t3dotgg @juliusmarminge #23706 was closed because this discussion doesn't have maintainer approval yet, which is fair (cc @UtkarshUsername). Could one of you give a yes or no on the direction and scope here? The proposal is a single operation to move an existing thread into another project. It's available as If the scope is too broad, I'm happy to narrow it. For example, the first step could be just moving a thread out of No project into an existing project, from the UI only. Once there's an approval here, I'll link it on the PR and ask for it to be reopened. |
|
Yeah this would be helpful. I ran into this issue today. |
|
+1, with a bulk case: an orchestrator agent filing the threads it launched, not its own. I ran an overnight orchestration. One coordinator thread launched about 30 implementation and review threads with I read #23706 to check it would cover this. It mostly does: One gap, though. One of my review threads delegated to two subagents, and all three sit under No project. With #23706 none of them can ever move. The parent is refused while a subagent still belongs to the project, archived ones included. Each subagent is refused with "Move its parent thread instead". Could the move take the parent's subagents along with it, rather than refusing? On narrowing the scope: moving an idle thread out of No project into an existing project would cover my case, as long as it is reachable from MCP and not only from the UI. |
|
Additional use case: move an existing thread from Project A to an existing Project B, not just No project → project. Long-lived planning, operations or implementation threads can be filed under the wrong repository, and recreating them or carrying over a summary is not an equivalent move. The key requirement is lossless reassignment:
Useful acceptance checks: the same thread ID appears exactly once in the destination, its previous links still resolve, history/WIP remain accessible, and no new run is started merely by organizing it. This supports the direction of this discussion; it is not a request to bypass maintainer approval for #23706. A purely visual subgroup inside a project is a separate need from changing the actual project association. Prepared with Codex; examples are anonymized. |
|
+1 from a real case on A long thread started as a question about one client repo, then turned into work on our agent setup. The agent could not move it: The Written with Claude Opus 5.5 in T3 Code. |
|
Note 🤖 Claude Opus 5.5 responding on behalf of leonhoulier +1 for the narrow first step already offered in this thread: move an idle No project thread into a project that already exists. Turn into project (#26767) covers the case where the scratch folder should become the project. It does not cover an existing destination: My case: a long-running No project conversation in which the agent worked, by path, in an existing Git repository. That repository now has its own T3 project, but the conversation, with its history, attachments and links, still sits under No project. Starting over with a summary loses that record. A concrete scope, in case it helps the decision (#6857 and #28287 ask for the same thing):
Would maintainers accept this direction and scope? |
|
I opened #29423 for a |
|
+1, with the reverse direction: moving a thread out of a project into No project. I asked a general question about my desktop setup (whether a computer-use driver is available on my Linux distro's current release) while I happened to be in a repository project. The conversation has nothing to do with that repository, so I wanted to move it under No project. The agent couldn't do it: If the first step is narrowed to "No project → existing project," please consider including the reverse too, or at least keeping the design open for it:
Having it in the thread menu and through Drafted with Claude Opus 5.5 in T3 Code. |
|
+1 — hit the same gap on A thread that started under a scratch project grew into a standalone repo (a claim-extraction pipeline, 2 commits). The user asked to file the thread under a new project. The agent checked the tool catalog and found no way: The workaround ended up being: For agent-driven flows the The implementation in #23706 (CLI Written with Qwen 3.8 in T3 Code on behalf of @demarant. |
|
Note Written by Claude Opus 5.5 in T3 Code, on behalf of giri256. Could a maintainer give a yes or no on this narrower scope? It's implemented in #32163, which has no approval yet and says so. Scope: one agent tool, The two open questions from #28287:
What I saw on real Claude Haiku turns: a thread moved to another folder and back. It reported the right Not covered: other providers are untested, evals haven't been run, and diffs and rollback of turns from before a move weren't tried. A server restart during the turn drops a pending move. The PR has the details. If you'd take this with changes, or want it narrower, tell me what to change and I'll update the PR. A no is useful too. |
|
Could a maintainer give a yes or no on this scope? Here it is in one place, with how it answers the two open questions from #28287 and Theo's note on #26767. Scope. Move an idle, top-level thread to an existing project in the same environment. Its next turn runs in that project's folder.
What it builds on.
Refused, before anything changes. Same project, archived or deleted thread, unfinished work, subagents, side chats and delegated threads, an open guest link, a destination that disables the thread's provider, and threads with their own worktree (clearing one would orphan it). Kept. Thread id, history, attachments, linked PRs, pin and snooze state, and scheduled tasks. Files stay where they are. Proposed follow-up, only if the above is a yes. A Move to project item in the web and mobile thread menus that calls the same command, with no new server path. Working version. All of the above, on top of #32163 and #30972, is on my fork: |
|
I opened #33342 for the composer side of this: It moves the working directory, not just the grouping. The next turn runs in the new folder, and earlier turns keep their links and diffs in the folder they ran in. It covers No project to a project, project to project, and back to No project. The PR has recordings, hopefully it doesn't just get closed. For the agent side, see #32163. |
+1 for project to project, on My case: a session starts in one project, and by the end the work clearly belongs in a different existing project. I want to move it there and keep the conversation and context. Today the only workaround is to have the agent write a handoff file and start a new thread in the destination project, which loses the real history and the provider session. The narrow scope already proposed here would cover it: move an idle top-level thread to an existing project in the same environment, with its next turn running in that project's folder. |
Uh oh!
There was an error while loading. Please reload this page.
A chat often starts under No project and then turns into work that belongs in a real project. Today that chat stays where it started. The same gap shows up the other way: a thread in one project cannot be filed under another.
The proposed scope is one operation, reached from the CLI, MCP, and the app:
t3 thread move <thread-id> <project>andt3_thread_updatewithmove_projectAn idle thread can move. A running turn has to stop first. A subagent stays with its parent, and a thread that still has a subagent cannot move. When the thread has its own checkout, the move keeps that checkout and the next turn still runs there. When it does not, the provider session ends and the next message starts in the destination project. The branch and any linked pull requests stay.
The implementation is in #23706. This discussion is the request for direction and scope. It is not an approval.
All reactions