[Desktop] Work committed in subagent worktrees under .claude/worktrees/ is invisible to the session's diff pane, and there is no way to select a compare ref
Summary
Claude Code creates subagent worktrees under .claude/worktrees/, a directory it owns. Work those agents commit is then invisible to the session's diff pane, because the pane looks at the directory the session is rooted in and offers no way to select a compare ref. The pane reports "no changes" while several commits exist in the same repository.
This is not the undisclosed-base problem in #65852 and not the uncommitted-changes gap in #52179. The work here is committed, and the base is correct. The compare side is what is unreachable.
Environment
- Claude Code 2.1.267, Desktop app
- macOS 26.6.2 (build 25G83)
- git 2.54.0 (Apple Git-157)
Repro
- Start a session in a repository, on
main. - Have the session delegate work to subagents that create worktrees under
.claude/worktrees/<branch>and commit there. In my case an orchestrator agent branched offorigin/main, and an implementation agent committed six times onslice-118-readout-elicitation-register. - Leave the session itself on
main. Do not useEnterWorktree. - Open the diff pane and select
main→ working tree → All changes.
Actual
The pane is empty. That is a correct statement about the directory it watches: the main checkout is on main, its tracked tree is clean, and git diff main returns nothing.
The work is real and reachable from the same repository:
$ git diff main...slice-118-readout-elicitation-register --stat
AGENTS.md | 4 +-
docs/BACKLOG.md | 59 +
docs/research/RESOURCE_REGISTER.md | 1688 ++++++++++++++++++++++++-
tests/unit/test_query_register.py | 2 +-
tests/unit/test_resource_register_contract.py | 2 +-
5 files changed, 1726 insertions(+), 29 deletions(-)
$ git worktree list | grep slice-118
/path/to/repo/.claude/worktrees/slice-118-readout-elicitation-register 9c2f199c [slice-118-readout-elicitation-register]
Expected
One of:
- The pane lists worktrees under
.claude/worktrees/and lets me view one, since Claude Code created them. - The pane lets me choose the compare ref, not only the base, so I can select a branch that is checked out in a sibling worktree.
- The pane says which refs it is comparing and that nothing else in this repository is being shown, so an empty result is legible rather than ambiguous.
Why the nearby issues do not cover this
- #23626 asks to select the base branch. That is a different axis. With a base dropdown, a session rooted on
mainstill has no way to reach a branch checked out elsewhere. - #52179 asks for an uncommitted working-tree diff. These changes are committed, so that view would also be empty.
- #65852 is about the base being undisclosed and inflating the count. Here the base is right and the count is honestly zero.
- #79530 concerns the diff panel of a session created in a worktree. This session was not.
Why it matters
Delegating implementation to subagents in worktrees is a documented pattern, and it is the one that keeps the orchestrator's context clean and allows parallel slices. The cost today is that the person supervising the work cannot see any of it in the app until a pull request exists. The review surface disappears for the entire length of the slice, which is exactly when review is cheapest.
There is a workaround, EnterWorktree, which moves the session into the worktree and makes the pane track it. It is not equivalent: it binds the session to one worktree, which defeats running several slices from one orchestrator session.
This issue has 1 comment on GitHub. Read the full discussion on GitHub ↗